JS基础 -构造函数与原型、原型链 Part two

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;
相关文章
相关标签/搜索