1.构造函数:html
function Foo(name,age){// Foo构造函数名大写 this.name =name; this.age = age; // return this; //即便不写,构造函数也默认返回this,最好不写 } var f = new Foo("lala",12);//建立实例 (执行过程:(1)this 变成空对象 (2)属性赋值 (3)return this 赋值给 f )
扩展:引用类型都有构造函数数组
var obj = {} //本质是 var obj = new Object() 的语法糖 var arr = [] // var arr = new Array() function Foo(){...} //var Foo = new Function(...) (instanceof判断引用类型属于哪一个构造函数,例: f instanceof Foo;判断逻辑:f的_proto_,一层一层向上找,可否对应到 Foo.prototype)
2.原型规则浏览器
如下所说的引用类型均指(对象、数组、函数,不包括null) (1)全部引用类型,都可自由扩展属性(具备对象特性) (2)全部引用类型,均有一个隐式原型属性(_proto_属性),属性值是一个普通对象 (3)只有全部函数,均有一个显示原型属性(prototype属性),属性值是一个普通对象 (4)全部引用类型,_proto_属性值 指向它的构造函数的 prototype属性值 (obj._proto_ === Object.prototype) (5)当想要获得一个引用类型的某一属性时,若是其自己不具备该属性,则会去它的_proto_(即它的构造函数的 prototype)中寻找
知识补充:函数
1.经过对象属性形式执行函数(例:obj.del()),this 指向对象自己 2.for(item in obj){ // for in在大多数浏览器屏蔽了来自原型的属性 if(obj.hasOwnProperty(item)){} //建议加上判断 }
3.原型链this
相关问题:spa
1.原型链继承的例子-封装DOM查询: function Elem(id){ //构造函数 this.elem = document.getElementById(id) } Elem.prototype.html = funcion(val){ var elem = this.elem; if(val){ elem.innerHtml = val; // return this //最好不写 (链式操做) }else{ rerurn elem.innerHtml } } Elem.prototype.on = funcion(type,fn){ var elem = this.elem; elem.addEventListener(type,fn); //addEventListener能够屡次绑定同一个事件而且不会覆盖上一个事件 } var div = new Elem("XXX"); div.html("<p>明天你好<p>").on("click",function(){ //链式调用 alert("Hello World") }); 2.描述new对象的过程: (1)建立一个新对象; (2)this 指向这个新对象; (3)执行代码(this 赋值); (4)返回 this;