关于new运算符

function Base(){
...
}

var obj = new Base();
这样代码的结果是什么,我们在javascript引擎中看到的对象模型是:


关于new运算符_第1张图片
joo_3.png

;

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

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

如果我们给Base.prototype的对象添加一些函数会有什么效果呢?
例如代码如下:

Base.prototype.toString = function() {
return this.id;
}

那么当我们使用new创建一个新对象的时候,根据proto的特性,toString这个方法也可以做新对象的方法被访问到。于是我们看到了:
构造函数中,我们来设置‘类’的成员变量(例如:例子中的id),构造对象prototype中我们来设置‘类’的公共方法。于是通过函数对象和Javascript特有的proto与prototype成员及new操作符,模拟出类和类实例化的效果。

你可能感兴趣的:(关于new运算符)