脚本宝典收集整理的这篇文章主要介绍了给大家总结了一些关于面向对象,闭包函数,原型链的题,话不多说,直接上干货!!!,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
欢迎来到我的知识乐园,希望这些题对大家有帮助。
1)直接给对象绑定属性和方法
2)通过字面量创建对象
3)工厂模式
4)构造函数
5)原型对象
6)混合模式(构造函数+原型对象)
function Obj(name,age){
this.name=name;
this.age=age;
this.fn()
}
Obj.PRototyPE.fn=function(){
console.LOG(this.name);
}
VAR o=new Obj('张三',50)
1) 实例的时候会创建一个空的新对象
2) 将 this指向为新建的空对象
3) 将绑定到this上的属性和方法,指向空对象
4) 最后将新建的对象返出
原型对象 prototype:每一个函数都有一个原型对象,绑定到原型对象上的属性和方法是公共的
每一个对象上都有一个__proto__对象,只有函数对象才有prototype
__proto__是一个指针,它指的是构造它的对象的prototype
(实例化对象的__proto__ 指向构造函数的原型对象)
1)由于__proto__是任何对象的都有的属性,是一个指针,指的是构造函数的prototype原型对象,而该构造函数的原型对象也有__proto__,指向该构造函数所继承对象的原型对象,以此类推,会形成一条由__proto__组成的链条,该链条就是原型链,递归访问__proto__到终点,值为null对象。
2)查找属性(方法),如果本身没有,则会去__proto__中查找,(也就是去构造函数的原型对象中查找),如果构造函数中的原型对象上也没有该属性,因为构造函数也是对象,也有__proto__,那么会去它的显式原型中查找,一直到null,如果没有则返回undefined
this 指向函数运行时所属的对象
this 不指函数本身,也不指函数所对的作用域,指向调用此函数的对象
this 指向分为六种情况:
1) 全局函数中的this,在全局环境下调用的时候指向window
注意:如果全局函数内部是严格模式,则在全局环境下不指向window 指undefined
2) 函数被赋值给某个事件时,指向绑定事件的对象
3) this在对象的方法中使用时,指向的是 方法所属的对象
4)在闭包中 this 指向window
5) 在构造函数中以及构造函数的原型对象中的this,都指向构造函数的实例对象
6)箭头函数中的this 指向 箭头函数被定义的执行环境
function deepCopy(obj){
var obj2=Array.isArray(obj)?[]:{};
for(var i in obj){ // 循环对象 obj
if(typeof obj[i]==='object'){ //判断取出的每一项是否是对象
// 如果是对象, 则需要 再新建对象 然后再进行循环赋值
obj2[i]={};
for(var k in obj[i]){
obj2[i][k] = obj[i][k];
}
obj2[i]=deepCopy(obj[i]);
}else{
// 如果不是对象, 则 直接赋值
obj2[i]=obj[i];
}
}
return obj2;
}
function geTTL(obj){
var oT=obj.offsetTop; // 获取当前元素到定位父级的上侧距离
var oL=obj.offsetLeft;// 获取当前元素到定位父级的左侧距离
var p=obj.offsetParent; // 获取当前元素的定位父级
while(p){ // 判断定位父级是否为空
oT=oT+p.offsetTop+p.clientTop;
oL=oL+p.offsetLeft+p.clientLeft;
p=p.offsetParent;
};
return {left:oL,top:oT};
}
面向对象编程: 1) 用抽象的方式创建基于现实世界模型的一种编程方式
2) 将需求抽象为一个对象,在这个对象上分析它的属性和方法
3) 将对函数的封装转为对对象的封装
面向过程编程 : 分析问题所需要的步骤,用函数将这些步骤一步一步实现的编程方式
闭包就是能够读取其他函数内部变量的函数,也可以把闭包简单理解成“定义在一个函数内部的函数”,它的最大用处有两个,一个是可以读取函数内部的变量,另一个是让这些变量的值始终保持在内存中。
闭包又有什么坏处?
1)增加了内存的消耗。
2) 某些浏览器上因为回收机制的问题,有内存泄漏,内存溢出风险。
3)增加了代码的复杂度,维护和调试不便
function getTL(obj) {
var oT = obj.offsetTop; // 获取当前元素到定位父级的上侧距离
var oL = obj.offsetLeft;// 获取当前元素到定位父级的左侧距离
var p = obj.offsetParent; // 获取当前元素的定位父级
while (p) { // 判断定位父级是否为空
oT = oT + p.offsetTop + p.clientTop;
oL = oL + p.offsetLeft + p.clientLeft;
p = p.offsetParent;
};
return { left: oL, top: oT };
}
以上是脚本宝典为你收集整理的给大家总结了一些关于面向对象,闭包函数,原型链的题,话不多说,直接上干货!!!全部内容,希望文章能够帮你解决给大家总结了一些关于面向对象,闭包函数,原型链的题,话不多说,直接上干货!!!所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。