1

我今天正在阅读主干的源代码,以尝试了解它是如何工作的。我尝试创建自己的初始化方法,该方法在实例化 myModel 时触发,但它似乎不起作用。(警报“默认你好”)

我在想,当 myModel 创建时,它会将“this.initialize.apply”复制到 myModel 中,并从 Model 的原型中继承初始化方法。如果 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();
4

2 回答 2

3

使用您的new Model()行,您正在创建一个全新的对象并将对它的引用放入myModel变量中。

initialize您之前定义的函数myModel绝对没有相关性。它永远不会发挥作用。只要你失去对它的引用,它就会被垃圾收集器拾取,myModel用它的新值覆盖变量。

于 2012-11-19T02:19:05.453 回答
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/

于 2012-11-19T02:21:07.017 回答