构造器
视频锁定
{$ currentTime | date:'mm:ss' $}
{$ timeLeft | date:'mm:ss' $}
我们在来讨论一下构造器,除了上边提到的直接操作对象的__proto__属性的指向以外,JavaScript 还支持构造器形式的对象创建。构造器会自动的为新创建的对象设置原型 对象,此时的原型对象通过构造器的 prototype 属性来引用。
我们以例子来说明,将 Task 函数作为构造器,然后创建两个实例 task1, task2:
function Task(id){
this.id = id;
}
Task.prototype.status = "STOPPED";
Task.prototype.execute = function(args){
return "execute task_"+this.id+"["+this.status+"]:"+args; }
var task1 = new Task(1);
var task2 = new Task(2);
task1.status = "ACTIVE";
task2.status = "STARTING";
print(task1.execute("task1"));
print(task2.execute("task2"));
运行结果如下:
execute task_1[ACTIVE]:task1
execute task_2[STARTING]:task2
构造器会自动为 task1,task2 两个对象设置原型对象 Task.prototype,这个对象被 Task(在此最为构造器)的 prototype 属性引用,参看下图中的箭头指向。
图 构造器方式的原型链
由于 Task 本身仍旧是函数,因此其”__proto__”属性为 Function.prototype
, 而内 建的函数原型对象的”__proto__”属性则为 Object.prototype
对象。最后 Obejct.prototype
的”__proto__”值为 null.
在线练习
{$ activeFileHint $}