如何设置javascript原型正确

时间:2014-01-22 16:33:17

标签: javascript prototype

我得到了以下代码片段,并想知道原型未设置的原因。看起来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());

1 个答案:

答案 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;