在这种情况下我如何重写属性
How can I override property in this situation
我是JavaScript新手,所以如果我误解了一个概念,请随时告诉我。
我有以下类:
var Human = function () {};
Object.defineProperty(Human.prototype, 'name', {
get: function () { return this._name; },
set: function (value) { this._name = value; },
configurable: true,
enumerable: true
});
然后定义以下子对象:
var Man = function () {};
Man.prototype = new Human(); //Am I inherting Human's prototype (and properties) here?
Man.prototype.name = 'Matt'; //If so, I should be setting Man's name property (overriding the value inherited from Human)
然而,console.log(Man.name)
打印出""
。
为什么会这样,我怎样才能正确地覆盖Human
的属性?
p :
我也试过
Man.name = 'Matt';
不是Man.prototype.Name = 'Matt';
但我得到了同样的行为。
Ps2:
我还应该注意,如果我执行console.log(Man.prototype._name)
,我将得到预期的输出"Matt"
因为你正在设置prototype属性,你需要从这个构造函数实例化一个新对象,然后prototype将被用来构造新的对象实例:
var Man = function () {};
Man.prototype = new Human();
Man.prototype.name = 'Matt';
var man = new Man(); // <--- this is new man
console.log(man.name);
然而,你可能不希望所有的Man
实例都有相同的名字——当你把东西放在prototype
中时,它会被所有的实例共享。这更有意义:
var Man = function () {};
Man.prototype = new Human();
var man = new Man();
man.name = 'Matt';
console.log(man.name);
这里只设置拥有对象man
的属性。
相关文章:
- 重写CSS:使用jquery显示none属性
- 用函数重写Javascript属性
- 重写命名函数的名称属性
- 重写内部 HTML 属性访问
- 如何遍历对象数组并重写属性值
- JS对象属性被意外重写
- 无法重写 JavaScript 对象的属性
- 重写<输入类型=“文件”>值属性
- 使用原型重写对象属性
- 如果我在 javascript 中重写了类名,是否重新应用了现有的 CSS 属性
- 如何重写主干集合以返回子属性中的模型
- javascript原型继承重写属性
- 原型上的属性重写实际对象的属性
- 重写JavaScript函数中的属性
- 在构造函数中初始化的JavaScriptPrototype属性不会重写已分配的新原型
- 在Vue.js中重写属性和方法的正确方法
- 重写对象'的克隆属性超出了最大调用堆栈大小
- jQuery's的CSS方法重写:hover属性
- ko.utils.extend没有't从模型重写属性
- 在这种情况下我如何重写属性