我正在努力设置一个原型的实例。我有这样的事情:
function Course() {
// Some stuff
}
Course.prototype.MyMethod = function() {
// Do stuff
}
现在,如果我创建一个New Course()
,一切正常,但是,我从JSON
获得了课程。所以我想做的是:
data.forEach(function(courseFromJSON) {
courseFromJSON.prototype = Course.prototype;
courseFromJSON.prototype = new Course(); // Doesn't work either
});
但是我的课程永远不会将方法MyMethod
设置为它们。也没有将courseFromJSON.prototype
设置为new Course()
。我一直在看道格拉斯克罗克福德的视频,但似乎无法做到正确。我做错了什么?
感谢。
答案 0 :(得分:1)
您的代码无效,因为您无法更改已创建对象的原型,或者至少不能通过prototype
属性更改。
存在两种选择:
使用内部__proto__
属性,但不建议这样做,因为它是非标准属性。
使用setPrototypeOf(Object, prototype)
功能,建议使用此功能,并在ES6中进行标准化。
甚至更好,请使用setPrototypeOf()
上的文档链接中的代码段:
Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
obj.__proto__ = proto;
return obj;
}