请参阅此原型继承代码:
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的新手。如果它长期影响。 如何?我不想要任何解决方法。
答案 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概念的好网站。