【发布时间】:2016-01-26 16:42:34
【问题描述】:
我对 Javascript 原型设计机制有些困惑。我有以下代码:
function Person () {
this.name = "no name";
this.setName = function (n) {
this.name = n;
}
}
function Student () {
this.id = "123";
}
Student.prototype = new Person();
s = new Student();
s.setName("Klaus");
在代码执行后,对象 s 有两个名字。对象本身的名称“Klaus”和原型中的名称“no name”。我知道该属性被遮蔽并且工作正常,但这感觉不自然?!有没有更好的方法只使用原型的属性?
【问题讨论】:
-
你为什么有
this.setName = function (n) { this.name = n; }构造?为什么不在Person()函数之外写Person.prototype.setName = function (n) { this.name = n; }? -
@Teemu 据我了解,
.setName是在s的上下文中调用的,但它是学生。因此,该属性也将位于s上(不在原型中)。最初,当将new Person分配给Student的原型属性时,该属性也会在其原型中创建。 -
是的,但似乎 OP 明白这一点,他们说:“我知道 [prototype] 属性被遮蔽了”。但实际问题尚不清楚。
-
@Teemu 哦,是的,你是对的。我今天应该停止写答案了。
-
你真正想要实现什么?在
s的上下文中访问原型中的name和s自己的属性?
标签: javascript prototype shadowing