【发布时间】:2013-02-17 10:58:36
【问题描述】:
这似乎是一个愚蠢的问题,但是...
如果我们有一个构造函数:
function Candy(name) {
this.name = name;
}
我们扩展了Candy这个对象的原型:
Candy.prototype.printName = function(name) {
console.log(this.name);
};
然后我们从 Candy 构造函数中创建一个新对象,并为这个新对象运行继承的方法:
var chocolate = new Candy("chocolate");
chocolate.printName();
对于我们为什么将巧克力作为输出,这不是我的想法。
当我们从构造函数创建巧克力对象时,我们本质上是这样做的:
var chocolate = new Candy();
chocolate.name = name;
如果是这样,为什么当我们运行时:
chocolate.printName();
有一个空白参数,它会吐出:“巧克力”?
巧克力不就是我们用 Candy 构造器构建的对象的名称吗?
例如,巧克力不是我们指定的巧克力名称参数,而是名称。既然我们传递了一个空的参数字段,为什么我们得到的是“巧克力”而不是名字呢?
【问题讨论】:
-
为什么在这里将参数传递给
printName很重要?您还没有使用printName中传递的参数的值。另外,当您将name分配给chocolate.name时,它的值是多少? -
因为您正在扩展父对象而不是覆盖其类变量。因此,类变量仍可在扩展范围内访问
标签: javascript object methods constructor prototype