gpt4 book ai didi

javascript - nodejs/javascript中的递归原型(prototype)继承

转载 作者:搜寻专家 更新时间:2023-10-31 23:51:42 25 4
gpt4 key购买 nike

在我的 nodejs 程序中,我有一个名为 person 的模块,它有一个原型(prototype)对象 (about),它还有一个子方法 (describe)。我正在尝试访问对象属性,但未定义。

有人可以纠正我的理解吗?我在这里做错了什么?

索引.js

var Person = require("./person");
var sam = new Person({name:"Sam",age:23})
sam.about.describe();

人.js

module.exports = (function() {
var person = function(options) {
if (options && options.name) this.name = options.name;
if (options && options.age) this.age = options.age;
}
person.prototype.about = {
describe : function(){
console.log("I am",this.name,"and",this.age,"years old");
}
}
return person;
})();

预期输出:“我是 Sam,23 岁”实际输出:“我未定义未定义岁”

最佳答案

正如其他人所说,您示例中的 this 指的是 about 对象,而不是 person 实例本身。

获得所需 API 的一种方法是在构造函数中创建 about 命名空间,并使用 binddescribe< 设置正确的上下文 处理程序。

module.exports = (function() {
var person = function(options) {
if (options && options.name) this.name = options.name;
if (options && options.age) this.age = options.age;
this.about = {
describe: function () {
console.log("I am",this.name,"and",this.age,"years old");
}.bind(this)
};
}

return person;
})();

这样你就可以简单地调用

var Person = require("./person");
var sam = new Person({name:"Sam",age:23})
sam.about.describe();

>>> I am Sam and 23 years old

关于javascript - nodejs/javascript中的递归原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43493773/

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