Я пытаюсь обернуть голову вокруг прототипов 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
Я спрашиваю из чистого интересаТак что бонусные баллы за практические случаи использования для этого ..