js原型系统

对象是对数据和行为的抽象,我们可以把一些关联的数据,和对该数据处理的算法封装在一起,并且用一个名字描述它,这样我就把一堆东西用一个名词表示了,对象对我们隐藏了数据的复杂度,使我可以在思考的时候把系统划分各种对象,更符合人类的思维,也更容易复用数据

 

js是原型继承范式,没有类,当你看上一个对象的时候,你就可以以某个对象为原型创建一个克隆了它的对象,Object.create(xiaoming);

 

js里面的每一个对象都有一个原型,这样优点类似吸血鬼的机制

 

所有对象的祖先原型为 Object.prototype, 该原始原型,躲藏在内存深处,只有通过这个Object.prototype这条路能找到它,任何对象的属性查找,如果原型链上都没,就会查到这个原型链条末端的原始对象.

 

 

var  Person = function(name) {

  this.name = name;

}

 

Person.prototype.sayName = function() {

  console.log(this.name);

}

 

 

var linhuansen = new Person('lihuanseng');

当new的时候发生了什么

 

new 运算符,首先在内存中开辟了一个空间,

{ }

然后在在该空间添加了 _proto_ 属性

{

 

  _proto_: {

      该对象为Person构造函数的原型对象

      即Person.prototype

 

 

 

      _proto_: {

        该对象为祖先原型        

        即Object.prototype指向的原型

      }

  }

};

 

然后把该空间绑定到函数的this 上;

构造函数内的代码就相当对该对象进行装饰,给该空间添加一些属性

 

构造函数的原型会被所有的new 出来的实例共享,所以会把一些对对象处理的方法,封装到原型上,

这样每个对象都可以通过原型链条,查找该原型,访问上面的方法,做到了节约内存

 

posted @ 2018-08-16 19:13  shengdouhun  阅读(108)  评论(0编辑  收藏  举报