【发布时间】:2016-11-07 19:00:21
【问题描述】:
尝试在Object.prototype 以及String.prototype 和Number.prototype 上定义hashCode 方法。我正在使用以下方法定义原型方法:
Object.defineProperty(Object.prototype, 'hashCode', {
value:function() {/*code*/},
enumerable:false
});
String.prototype.hashCode = function() {/*code*/};
Number.prototype.hashCode = function() {/*code*/};
当我使用(''、new String()、3、new Number())中的任何一个创建数字或字符串并在实例上调用 hashCode 时,Object.prototype.hashCode 方法始终运行而不是 @ 987654334@或Number.prototype.hashCode。
怎么了?
【问题讨论】:
-
仅供参考,如果我还使用
Object.defineProperty(String.prototype...定义字符串和数字原型方法,那么它可以按预期工作。它与使用String.prototype.hashCode = function() ...的方式不同,这一事实让我感到困惑。 -
将属性描述符设为
writable: true,否则当在继承它的对象上写入该属性时,它将被继承为不可写。 jsfiddle.net/5ox1a0f2 -
哦,酷。我没有意识到默认情况下它是不可写的。谢谢!
-
对此
writable行为的密切相关讨论:Does Javascript writable descriptor prevent changes on instances? -
确实如此。有趣的是,如果我设置 String.prototype.hashCode 和 Number.prototype.hashCode before 我调用
Object.defineProperty(Object.prorotype...函数按预期工作,所以如果你创建它们,然后让它们不可写Object.prototype,它们已经被编写好了,不会丢失它们的值。
标签: javascript inheritance prototype-chain