gpt4 book ai didi

javascript - javascript 原型(prototype)上的属性与对象上的属性有什么区别?

转载 作者:行者123 更新时间:2023-12-03 06:05:26 25 4
gpt4 key购买 nike

举个例子:

 var personPrototype = { 
firstName: '',
lastName: '',

getFullname: function() {
return this.firstName + ' : ' + this.lastName;
}
}

Person = {

};

function newPerson(firstName, lastName) {
var Person = function(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
Person.prototype = personPrototype;
return new Person(firstName, lastName);
}

var p1 = newPerson('someone', 'else');
var p2 = newPerson('john', 'doe');
console.log(p1.getFullname());
console.log(p2.getFullname());

将firstName和lastName从personPrototype移动到Person会产生相同的结果。这是否意味着两者之间没有区别,还是我忽略了某些东西?

最佳答案

直接放在对象上的属性和放在对象原型(prototype)上的属性之间的区别非常显着。原型(prototype)由对象的所有实例共享。对象中定义的属性(如在构造函数中)将在每个实例上定义。

我怀疑您在定义 Person 对象时感到困惑。全局范围内的 PersonnewPerson 内的构造函数覆盖,并且从未被使用。您根本不需要在构造函数/方法函数之外定义属性,除非您有特定原因在对象的所有实例之间共享值。

至于为什么在原型(prototype)中定义属性没有区别:是 the prototype chain 。当您在 personPrototype 中定义 firstName 等,然后也在构造函数中定义它时,它会被覆盖。因此,调用 getFullName 会退回到 personPrototype,然后在 Person 的当前实例上查找 lastName,从而获取调用 new Person(firstName, lastName) 时传递的值。

关于javascript - javascript 原型(prototype)上的属性与对象上的属性有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39569614/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com