我得到了以下代码片段,并想知道原型未设置的原因。看起来getCompany方法覆盖了getName方法。这是因为return子句返回JSON并覆盖所有其他方法吗?如果方法名称相等,它应该只覆盖原型函数。我需要在“返回表单”中写一些只暴露某些方法。
Person = function(name) {
var name = name;
return {
getName: function() {return this.name;}
};
};
SecondPerson = function(name) {
this.name = name;
return {
getCompany: function(){alert("lolz");}
};
}
SecondPerson.prototype= new Person();
SecondPerson.prototype.constructor = SecondPerson;
var tom = new SecondPerson("Tom");
alert(tom.getName());
答案 0 :(得分:0)
这是因为return子句返回JSON并覆盖所有其他方法吗?
A" JS对象字面值",但是是。
我需要用"返回表格"只揭露某些方法。
不,你没有。要仅显示某些属性,请仅在实例上放置某些方法(this
在构造函数内):
function Person(name) {
this.getName = function() {return name;};
}
此外,您似乎将变量与属性混淆 - 请参阅Javascript: Do I need to put this.var for every variable in an object?。
现在,如果我们已经解决了这个问题,那就来Correct javascript inheritance了。你should not use new
for creating the prototype object。要创建特定于实例的属性,您必须在新实例上显式应用父构造函数。
function SecondPerson(name) {
Person.call(this, name);
this.getCompany = function(){alert("lolz");}; // might be defined on the prototype
}
SecondPerson.prototype= Object.create(Person.prototype);
SecondPerson.prototype.constructor = SecondPerson;