gpt4 book ai didi

javascript - 在原型(prototype)与构造函数中声明属性?优点和缺点?

转载 作者:行者123 更新时间:2023-12-01 01:21:55 24 4
gpt4 key购买 nike

我很难理解为什么应该在构造函数类或其原型(prototype)对象上定义属性。

这是我对原型(prototype)的理解 - 在原型(prototype)中声明属性(而不是链接的父对象)可以节省性能,因为每个子对象不会有自己的父属性的副本。

问题:但我认为你不能从非基本类型复制值,即函数对象只能传递引用......并且只能从基本类型复制?

**这是否意味着如果我继承父级的方法(如下所示),我将复制对方法的引用或实际复制? **

function Parent() {
this.name = "jeff";
}

var child = new Parent();
console.log(child.name); /// is copied from parent or the reference is copied??

在下面的示例中,我引用了原型(prototype)...对吧?

Parent.prototype.age = 9;
child.age // I looks at the parent class, then reference to prototype.age.

****问题2:** 如果我可以更改特定对象的prototype.age,那么我实际上复制了该值,对吗?那么这有什么意义**

child.age = 10; // changed the value for THIS object

最佳答案

你把一些事情搞混了。当尝试从面向对象的 Angular 理解 javascript 时,这种情况很常见,因为它不太适合。也许这会有所帮助:

这只是一个函数(当用 new 调用时)返回一个对象:

function Parent() {
// create a new object and call it this
this.name = "jeff";
}

它返回的对象每次都会重新创建,并且该对象就是 this 所引用的对象。因此,每次运行它时,它都会创建一个对象,为该对象提供一个设置为 jeffname 参数,然后重新启动。如果使用动态属性更容易查看:

function Parent() {
console.log("creating a new object and a new value")
this.value = Math.floor(Math.random()* 100000);
}

var child1 = new Parent();
console.log("child1: ", child1)

var child2 = new Parent();
console.log("child2: ", child2)

值不是继承的,它只是在调用函数时分配给对象。 Parent 只是一个函数。

像所有函数一样,Parent 有一个 prototype 属性。当它用new创建一个对象时,它会将该对象链接到它的prototype。如果您尝试在返回的对象上查找属性但找不到它,则 javascript 将查找父原型(prototype)。当您分配 child.age = 10 时, child 现在拥有自己的年龄属性。它不再需要查看原型(prototype)。如果原型(prototype)没有自己的属性,它只会在原型(prototype)上查找属性。

function Parent() {
this.name = "Jeff"
}

Parent.prototype.age = 9

var child = new Parent();

// child has no age prop so it looks on the prototype:
console.log(child.age)
console.log("Has age:", child.hasOwnProperty('age'))

child.age = 20
// now child has its own age property. It doens't look at the prototype
console.log("Has age:", child.hasOwnProperty('age'))
console.log(child.age)

关于javascript - 在原型(prototype)与构造函数中声明属性?优点和缺点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54156403/

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