原型继承:省略构造函数赋值时没有区别

时间:2017-02-05 20:19:18

标签: javascript inheritance prototypal-inheritance

请参阅此原型继承代码:

var Person = function() {
  this.canTalk = true;
};

Person.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name);
  }
};

var Employee = function(name, title) {
  Person.call(this);
  this.name = name;
  this.title = title;
};

Employee.prototype = Object.create(Person.prototype);
// Note: there's no difference, when I comment out the following line
Employee.prototype.constructor = Employee;

Employee.prototype.greet = function() {
  if (this.canTalk) {
    console.log('Hi, I am ' + this.name + ', the ' + this.title);
  }
};

var bob = new Employee('Bob', 'Builder');

bob.greet();

即使我注释掉了

,我也会得到相同的结果(控制台输出)
Employee.prototype.constructor = Employee;

然后有什么值得均衡函数原型构造函数来自行运行。我是JS的新手。如果它长期影响。 如何?我不想要任何解决方法。

1 个答案:

答案 0 :(得分:0)

  

然后有什么值得使函数原型构造函数均衡才能自行运行。

它有一些内在价值和一些实际用途。

首先,在派生类的原型上设置正确的构造函数可以使事物对称。这意味着,属性.constructor用于直观地建议哪个函数创建了这个对象

var Person = function() {};
var Employee = function() {};

Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;

var bob = new Employee();

console.log(bob.constructor);
console.log(bob.__proto__.constructor);
console.log(bob.__proto__.__proto__.constructor);
console.log(bob.__proto__.__proto__.__proto__.constructor);

// [Function: Employee]
// [Function: Employee]
// [Function: Person]
// [Function: Object]


var Person = function() {};
var Employee = function() {};

Employee.prototype = Object.create(Person.prototype);
// Employee.prototype.constructor = Employee;

var bob = new Employee();

console.log(bob.constructor);
console.log(bob.__proto__.constructor);
console.log(bob.__proto__.__proto__.constructor);
console.log(bob.__proto__.__proto__.__proto__.constructor);

// [Function: Person]
// [Function: Person]
// [Function: Person]
// [Function: Object]

其次,如果需要使用构造函数,可以从.constructor引用中使用它,而不是使用函数名。这一点在asnwer中详细阐述:https://stackoverflow.com/a/8454111/1343488

  

我是JS的新手。

我建议您访问网站:http://www.javascripttutorial.net/

这是一个研究JS概念的好网站。