一天一点新东西-js的new操作符

 今天重拾js高级程序设计的对象章节,看到工厂模式和构造函数模式,其中唯一不同的就是new这个操作符,好奇new操作符到底干了什么,百度之,得到一个较好的解释,想写下来,加深理解。(后来发现下面有解释- -)

new操作符

  var obj = new Base('base');  

我们在Javascript引擎中看到的对象模型是:

new操作符具体干了什么呢?其实很简单,就干了三件事情:

  var obj  = {}; obj.__proto__ = Base.prototype; Base.call(obj);  

第一行,我们创建了一个空对象obj
第二行,我们将这个空对象的__proto__成员指向了Base函数对象prototype成员对象
第三行,我们将Base函数对象的this指针替换成obj,然后再调用Base函数,于是我们就给obj对象赋值了一个id成员变量,这个成员变量的值是”base”。

当然在Base.prototype上添加一个函数,如,Base.prototype.toString = function() { console.log(id)},obj对象也是可以根据__proto__特性访问到Base的prototype原型方法的。

所以一般在prototype定义公用方法,在obj实例上定义成员变量。

 

posted @ 2016-09-04 19:26  stupidkiddy  阅读(97)  评论(0)    收藏  举报