JS new 操作符

版权声明:本博客所有原创文章均可以转载 https://blog.csdn.net/ivanx_cc/article/details/49664609

有面向对象编程的基础有时会成为一种负担,比如看到 new 的时候,Java 程序员可能 会认为这将会调用一个类的构造器构造一个新的对象出来,我们来看一个例子:

function Shape(type){
this.type = type || "rect"; 
this.calc = function(){
return "calc, "+this.type; 
}
}

var triangle = new Shape("triangle");
print(triangle.calc());

var circle = new Shape("circle");
print(circle.calc());

运行结果如下:

calc, triangle
calc, circle

Java 程序员可能会觉得 Shape 就是一个类,然后 triangle,circle 即是 Shape 对应的具体对象,而其实 JavaScript 并非如此工作的,罪魁祸首即为此 new 操作符。在 JavaScript 中,通过 new 操作符来作用与一个函数,实质上会发生这样的动作:

首先,创建一个空对象,然后用函数的 apply 方法,将这个空对象传入作为 apply 的 第一个参数,及上下文参数。这样函数内部的 this 将会被这个空的对象所替代:

var triangle = new Shape("triangle"); 
//上一句相当于下面的代码
var triangle = {}; 
Shape.apply(triangle, ["triangle"]);

猜你喜欢

转载自blog.csdn.net/ivanx_cc/article/details/49664609