Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确设置javascript原型_Javascript_Prototype - Fatal编程技术网

如何正确设置javascript原型

如何正确设置javascript原型,javascript,prototype,Javascript,Prototype,我得到了下面的代码片段,想知道为什么没有设置原型。看起来getCompany方法正在重写getName方法。这是因为return子句返回JSON并覆盖所有其他方法吗?只有当方法名相等时,它才应该重写原型函数。我需要在“返回表单”中写入,以仅公开某些方法 Person = function(name) { var name = name; return { getName: function() {return this.name;} }; }; SecondPers

我得到了下面的代码片段,想知道为什么没有设置原型。看起来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());
这是因为return子句返回JSON并覆盖所有其他方法吗

一个“JS对象文字”,但是是的

我需要在“返回表单”中写入,以仅公开某些方法

不,你没有。要仅公开某些属性,请仅在实例上放置某些方法(
this
在构造函数中):

此外,您似乎混淆了变量和属性-请参阅

现在,如果我们解决了这个问题,问题就来了。你为了创建特定于实例的属性,必须在新实例上显式应用父构造函数

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