我正在努力思考 javascript 原型(prototype),并开始怀疑是否有一种方法可以删除/取消定义在对象上定义的实例方法,以便调用原型(prototype)中的方法。所以在下面
/* 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'
有没有办法从实例 foo1
中删除 myMethod
,这样调用 foo1.myMethod();
就会调用定义在原型(prototype)和警报“原型(prototype)中的 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
我是出于纯粹的兴趣才问的,所以实际用例的加分..
最佳答案
您可以使用 delete
来做到这一点:
The
delete
operator deletes a property of an object, or an element at a specified index in an array.
delete foo1['myMethod'];
这是删除对象属性的唯一方法。一个实际用例是从哈希表中删除条目,这是通过使用对象实现的。
关于javascript - 有没有办法通过 "undefine"实例方法来揭示原型(prototype)中定义的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233336/