我今天正在阅读骨干的源代码,试图了解它是如何工作的。我试图创建自己的初始化方法,当myModel被实例化时触发,但它似乎不起作用。 (提醒“默认你好”)
我在想,当myModel被创建时,它会将“this.initialize.apply”复制到myModel中,并且它会继承Model的原型中的initialize方法。如果myMethod没有初始化方法,它将查找链,但如果myMethod确实拥有它,它将使用它。从我(错误地)思考,myModel读取像“myModel.initialize.appy(this,arguments)”的应用,但它似乎是调用模型。
我想知道哪里出错了? http://jsfiddle.net/LvjpK/
function Model () {
this.initialize.apply(this, arguments);
}
Model.prototype.initialize = function () {
alert("Default Hello");
};
myModel = {
initialize: function() {
alert("Hello from myModel");
}
};
var myModel = new Model();
答案 0 :(得分:3)
使用new Model()
行,您将创建一个全新的对象并将其引用到myModel
变量中。
您之前在initialize
上定义的myModel
函数绝对没有相关性。它永远不会发挥作用。只要您丢失对它的引用,它就会被垃圾收集器拾取,方法是用它的新值覆盖myModel
变量。
答案 1 :(得分:0)
这可能更符合您的目标:
function Model () {
this.initialize.apply(this, arguments);
}
Model.prototype.initialize = function () {
alert("Default Hello");
};
function MyModel() {
// Call the Model constructor function.
Model.apply(this, arguments);
}
// Make MyModel inherit from Model
MyModel.prototype = Object.create(Model.prototype);
// Override the initialize method on MyModel
MyModel.prototype.initialize = function() {
alert("Hello from myModel");
};
var myModel = new MyModel();
JSFiddle:http://jsfiddle.net/uh2ev/