gpt4 book ai didi

对象

转载 作者:行者123 更新时间:2023-11-29 18:42:15 28 4
gpt4 key购买 nike

function Person(fname, lname) {
this.fname = fname,
this.lname = lname,
this.getName = function(){
console.log(`${fname} ${lname}`)
}
}
var x1 = new Person(“amnah”, “khatun”)
var x2 = new Person(“xyz”, “pqr”)
console.log(x1.getName())

输出:

amnah khatun
undefined

我只调用 x1.getName() 为什么两个都被调用并且 o/p 对于第二个未定义。如何解决这个问题。我尝试过使用 protype 属性,但都没有成功。

最佳答案

您实际上没有从函数返回任何内容 console.log(x1.getName()) 将记录从函数返回的值,该值是 undefined

您应该返回字符串而不是记录。

function Person(fname, lname) {
this.fname = fname,
this.lname = lname,
this.getName = function(){
return `${fname} ${lname}`
}
}
var x1 = new Person('amnah', 'khatun')
var x2 = new Person('xyz', 'pqr')
console.log(x1.getName())

另一点是,不记录属性的值是从闭包中转换值。 x1.getName 将始终返回相同的值,即使您更改了属性也是如此。

function Person(fname, lname) {
this.fname = fname,
this.lname = lname,
this.getName = function(){
return `${fname} ${lname}`
}
}
var x1 = new Person('amnah', 'khatun')
x1.fname = 'changed';

console.log(x1.getName())

要修复此问题,请在属性之前使用它。

 this.getName = function(){
return `${this.fname} ${this.lname}`
}

但是,向构造函数中添加方法并不好。在这里,Person 的每个实例都有自己的函数 getName。你应该使用prototype

function Person(fname, lname) {
this.fname = fname
this.lname = lname
}
Person.prototype.getName = function(){
return `${this.fname} ${this.lname}`;
}
var x1 = new Person('amnah', 'khatun')
var x2 = new Person('xyz', 'pqr')
console.log(x1.getName())

关于对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56184960/

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