gpt4 book ai didi

javascript - 这是 "correct way"来模仿通过原型(prototype)继承通过构造函数传递参数的行为吗?

转载 作者:行者123 更新时间:2023-11-30 10:15:08 25 4
gpt4 key购买 nike

我通过老式构造函数/new 关键字方法学习了 javascript 继承,如下所示:

function People(name, age){
this.name = name;
this.age = age;
this.yearsUntilRetire = yearsLeft;
}

function yearsLeft(){
var numYears = 65 - this.age;
return numYears;
}
lady = new People("Lady Gaga", 28);
mickey = new People("Mickey Mouse", 99);

现在,当使用此方法时,我可以创建构造函数“People”的新实例并传入将填充函数值的数据(在本例中为“name”和“age”)。我刚刚学习原型(prototype)继承,我知道对象直接从其他对象继承,并且 javascript 是一种无类语言,例如,我知道如何执行以下操作,这是我从更新的教程中学到的:

var person = {
kind: 'person'
}

var zack = Object.create(person);

zack.kind = 'zack'

console.log(zack.kind); //=> 'zack'
// zack now has a 'kind' property

console.log(person.kind); //=> 'person'
// person has not being modified

但我的问题是,似乎没有任何方法可以将参数“传递”到构造函数中,以使新对象的值更加动态并像构造函数那样填充蓝图( “姓名”和“年龄”),相反,在我只想更改值的情况下,我会覆盖一些新对象的原始数据,如上所示:

zack.kind = 'zack'

在这部分代码中,我似乎只是直接在 zack.kind 上盖章,它最终会具有“person”的值。

原型(prototype)继承中对值的操作通常是这样完成的吗?你在哪里盖过数据?或者是否有一些方法可以保持值的蓝图形式并且只传递一些选择的数据片段,比如构造函数参数?我没有将数据传递到函数中,而是只是标记要更改的其他对象数据,这似乎很奇怪(我知道它不会更改原始对象值,但确实感觉有点松散和奇怪) .这对我来说似乎很奇怪,因为我已经使用构造函数几个月了,并且想确保我以正确的方式工作。对不起,如果这是一个新手问题。

最佳答案

有一个共同的约定,即使用工厂函数代替构造函数。该方法封装对象创建,允许带参数。

在这个简单的例子中,它可能是:

var person = {
kind: 'person',
create: function(kind) {
var p = Object.create(person);
p.kind = kind;
return p;
}
}

var zack = person.create('zack');

关于javascript - 这是 "correct way"来模仿通过原型(prototype)继承通过构造函数传递参数的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24272835/

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