javascript - 有没有办法通过 "undefine"实例方法来揭示原型(prototype)中定义的方法?

标签 javascript ruby oop function prototype

我正在努力思考 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/

相关文章:

Ruby,在遍历数组时跳过项目?

Javascript 这不指向正确的对象

javascript - 如何从动态表中获取数据

ruby-on-rails - 用于 ruby​​/rails 的自然语言日期解析器

ruby-on-rails - 从 Ruby on Rails Controller 本地保存呈现的静态 html、css、javascript 文件

java - 使用 MVC 风格,调用查询函数的最佳位置在哪里?

java - 为什么我的 getter 应该返回对象数组时却返回 [LSubmarine;@27c170f0

javascript - 如何获取具有几乎相同ID属性的DIV的数量?

文件名中的 Javascript 相对路径(不带 windows.location)

javascript - 使用 Flatiron 的 Resourceful & Restful 进行身份验证和授权