我正试图围绕javascript原型,并开始怀疑是否有办法删除/取消定义对象上定义的实例方法,因此将调用原型中的方法。所以在下面的
/* javascript */
function Foo () {};
Foo.prototype.myMethod = function() {alert('foo')};
var foo1 = new Foo();
var foo2 = new Foo();
foo1.myMethod = function () {alert('foo changed for instance')};
Foo.prototype.myMethod = function () {alert('foo changed in prototype')};
foo1.myMethod(); // alerts 'foo changed for instance'
foo2.myMethod(); // alerts 'foo changed in prototype'
有没有办法从实例myMethod
中删除foo1
,以便调用foo1.myMethod();
将调用原型中定义的方法并警告“ foo在原型中更改“?
我想我正在寻找类似于从Ruby中的单例类中删除方法的东西,例如:
# ruby
class Foo
def myMethod
puts "foo"
end
end
f = Foo.new
f.myMethod # => foo
# make singleton class, re-define myMethod for this instance
def f.myMethod
puts "bar"
end
f.myMethod # => bar
# remove method from singleton class
class << f
remove_method :myMethod
end
f.myMethod # => foo
我要求纯粹的兴趣,因此实际使用案例的奖励积分......
答案 0 :(得分:3)
您可以使用delete
:
delete
运算符删除对象的属性或数组中指定索引处的元素。
delete foo1['myMethod'];
这是删除对象属性的唯一方法。一个实际的用例是从哈希表中删除条目,这是通过使用对象实现的。
答案 1 :(得分:1)
你可以删除它
function Foo () {};
Foo.prototype.myMethod = function() {alert('foo')};
var foo1 = new Foo();
var foo2 = new Foo();
foo1.myMethod = function () {alert('foo changed for instance')};
Foo.prototype.myMethod = function () {alert('foo changed in prototype')};
foo1.myMethod(); // alerts 'foo changed for instance'
foo2.myMethod(); // alerts 'foo changed in prototype'
// deleting the unwanted method
delete foo1.myMethod;
foo1.myMethod(); // alerts 'foo changed in prototype'
foo2.myMethod(); // alerts 'foo changed in prototype'