【发布时间】:2013-06-23 19:06:27
【问题描述】:
开始在 JavaScript 中使用已配置的对象,但有些东西给我带来了一些问题。
查看此代码:
function Monster() {
}
function Animal() {
Object.defineProperty(this, "name", {
set: function(n) { },
get: function() { return "Jim"; } // hard-coded to demonstrate problem
});
}
Monster.prototype = new Animal();
var monster = new Monster();
monster.name = "John";
monster.name // Still returns Jim. I need to assign the property to THIS object, so Jim is shadowed by John.
正如评论所说,这是输出“Jim”,因为 getter 被硬编码为返回。
我不想每次调用 monster.name 时都更改我的原型 - 我想要在我的怪物实例上添加一个新的阴影属性。我该如何处理?
【问题讨论】:
-
您正在尝试使用 prototypical 继承来覆盖基类上的 per instance 属性。它不会起作用。
-
那么有没有办法在不被原型定义吃掉的情况下分配monster.name?我不想更改我的原型,除非我直接尝试修改 monster.__proto__.name - 否则我希望 monster.name 指向该对象上的属性,而不是我的原型。
-
我的回答对您有帮助吗?它展示了如何在不更改原型定义的情况下重新分配名称。
标签: javascript html oop