new 操作符
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
有面向对象编程的基础有时会成为一种负担,比如看到 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"]);
在线练习
{$ activeFileHint $}