我正在尝试动态添加原型但由于某种原因,当我尝试继承undefined
时,此关键字会返回prototype
。但是,当我在浏览器控制台上运行相同的代码时,它可以正为什么它不能使用Node.js?
我还在问题末尾包含了我的完整代码。
我的主要问题发生在这里:
let postObj = function(){
this.data = post;
this.originalIndex = i;
};
//postObj.prototype = postProto; // have same result
postObj.prototype = Object.create(postProto);
//postObj.data = post;
_self.posts.push(new postObj());
当我尝试在原型方法中访问this
时,它总是返回undefined。例如,postProto
有一个查找id
的方法this.data._id
。正如您所看到的,我已经为postObj
设置了构造函数,那为什么不将它传递给原型?
请告诉我这里有什么问题。
完整代码:
const postPrototype = {
id: (){
return this.data._id;
},
title: (){
return this.data.title;
}
}
function fetchPosts(){
this.posts = [];
this.rawPosts = [
{_id: '1', title: 'In sit amet lorem velit, in dictum lorem'},
{_id: '2', title: 'Vestibulum ante ipsum primis in faucibu'},
{_id: '3', title: 'Integer vulputate nibh et diam sagittis in dictum mauris dapibus'}
];
this.inheritPrototype();
}
fetchPosts.prototype.inheritPrototype = function(){
var _self = this;
if(!_.isEmpty(_self.rawPosts)){
_self.rawPosts.forEach(function(post, i){
try{
let postObj = function(){
this.data = post;
this.originalIndex = i;
};
//postObj.prototype = postProto; // have same result
postObj.prototype = Object.create(postPrototype);
//postObj.data = post;
_self.posts.push(new postObj());
}catch(err){
console.log(err);
}
});
}
};
fetchPosts.prototype.get = function(){
return this.posts;
}
var sampleFetch = new fetchPosts();
sampleFetch.get().forEach(function(post, i){
post.id(); // This return error: cannot get property _id undefined
});
答案 0 :(得分:0)
首先,由于try catch阻止,您隐藏了错误:"ReferenceError: postProto is not defined"
。在脚本的顶部,您已定义postPrototype
变量,但您使用了postProto
,这当然是未定义的。
此外,在postPrototype
的声明中,您使用了对象字面速记但不正确。您应该在没有:
的情况下使用它。
const postPrototype = {
id (){
return this.data._id;
},
title (){
return this.data.title;
}
}
我已编辑了您的代码here。