NiYingfeng 的博客

记录技术、生活与思考

0%

JS中的 new 操作符简单理解

首先上一一个简单的 new 操作符实例

1
2
3
4
5
6
7
8
9
var Person = function(name){
this.name = name;
this.say = function(){
return "I am " + this.name;
};
}

var nyf = new Person("nyf");
nyf.say();

简单来说,上述例子中,以 new 操作符调用构造函数的时候,函数内部发生以下变化:

  1. 创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
  2. 属性和方法被加入到 this 引用的对象中。
  3. 新创建的对象由 this 所引用,并且最后隐式的返回 this 。

以上情况在 new 操作符调用下,后台就相当于

1
2
3
4
5
6
7
8
var Person = function(name){
//var this = {};
this.name = name;
this.say = function(){
return "I am " + this.name;
};
//return this;
}

对于以上的讲述不知道有没有讲清楚。

1
var obj = new Base();

相当于运行以下代码

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

对于ES5中添加了 Object.create(),

1
2
3
4
5
6
7
if(typeof Object.create !== "function"){
Object.create = function(o){
function F(){};
F.prototype = o;
return new F();
}
}