我试图了解以下三个功能之间的区别。一天后,我在MDN和其他来源上提出了一些“结论”,我想知道是否有人可以帮助我验证它们。谢谢:)
function Person (name){
this.name = name;
this.greeting = function(){
alert(this.name);
};
}
var person = new Person('Bob');
function Person(name) {
this.name = name;
}
Person.prototype.greeting = function() {
alert(this.name);
}
let person = new Person("Bob");
class Person {
constructor(name) {
this.name = name;
}
greeting() {
alert(this.name);
}
}
let person = new Person("Bob");
问题:
这三个函数将名称和问候语成员添加到Person对象原型。这句话正确吗?
代码使用了新的ES6 class关键字,并以不同的方式在“幕后”工作。 (附言。我之所以写“幕后花絮”,是因为我尚不清楚调用该函数时引擎盖下会发生什么,但暂时我认为我还不算太深,无法深入研究)。
第1块和第2块中的代码达到相同,并且以相同的方式在“幕后”工作。两者之间的代码差异在于,在#1块中,我们将name
变量和函数greeting
都保留在同一代码块中,而在#2块中,我们将函数{{ } 1}}与变量greeting
分开(使用name
将greeting
函数添加到Person原型中)
在#2块中使用Person.prototype.greeting
,我们获得的效果与在#1块中的Person.prototype.greeting = function () {...}
下方放置this.greeting = function (...)
谢谢!
答案 0 :(得分:0)
回答问题: