Sid*_*uru 7 javascript prototype ecmascript-6
我创建了2个原型实例,在原型中更改了一个函数,两个实例中都反映了变化(很棒).但是,当我通过删除函数修改原型时,该函数仍然存在于现有实例中.
function A() {
this.name = "cool";
}
A.prototype = {
howCool: function() {
return this.name + "er";
}
};
var a1 = new A(),
a2 = new A();
a1.name = "hot";
//line1
console.log(a1.howCool());
//line2
console.log(a2.howCool());
A.prototype = {};
//line3
console.log(a1.howCool());
//line4
var a3 = new A();
console.log(a3.howCool());Run Code Online (Sandbox Code Playgroud)
第1行和第2行按预期工作,在将原型设置为空后,第4行显示未定义的预期值.但是第3行仍然显示了函数定义.
基本上,您prototype将为函数重新分配属性A以指向新对象.这不会影响旧对象,因此不会影响先前的实例.
这是一个正在发生的事情的例证.
执行此代码后:
function A() {
this.name = "cool";
}
A.prototype = {
howCool: function() {
return this.name + "er";
}
};
var a1 = new A(),
a2 = new A();
Run Code Online (Sandbox Code Playgroud)
情况如下:
然后执行此代码:
A.prototype = {};
var a3 = new A();
Run Code Online (Sandbox Code Playgroud)
A.prototype指向新对象的点但旧实例的[[Prototype]]属性仍指向旧对象.
如果要实际删除该方法,则必须编辑原始对象,而不是指向新对象.
要从howCool()原型中实际删除方法,这样的东西可以工作:
delete A.prototype.howCool
Run Code Online (Sandbox Code Playgroud)
哪个会给:
现在任何未来的实例,例如a3和先前的实例,都将指向同一个对象,但该对象将不具有该howCool()方法.
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |