是的,这是预期的行为。
它无声地失败了。
不完全是。或:仅在草率模式下。如果您
"use strict"使用,您会得到一个
Error { message: "Invalid assignment in strict mode", … }在线上
test4.answer = function() { return 0; };可以在子类(test2)的原型上重载它,但不能在子类(test4)的实例上重载
这与实例与原型无关。您没有注意到的是,您正在使用不同的方法来创建重载属性:
- 对继承且不可写的属性的分配失败
- 一个
Object.defineProperty
电话刚创建了一个新的属性,除非对象是不可扩展的
您可以对实例执行相同的操作:
Object.defineProperty(test4, "answer", { value: function() { return 42; }});


