1

今日はバックボーンのソースコードを読んで、それがどのように機能するかを学びました。myModel がインスタンス化されたときに起動する独自の初期化メソッドを作成しようとしましたが、機能していないようです。(アラート「デフォルトのこんにちは」)

私は、myModel が作成されたときに、「this.initialize.apply」を myModel にコピーし、Model のプロトタイプから初期化メソッドを継承すると考えていました。myMethod に初期化メソッドがない場合はチェーンを検索しますが、myMethod にある場合は代わりにそれを使用します。私が(間違って)考えていることから、myModelは「myModel.initialize.appy(this、arguments)」のようにapplyを読み取りますが、代わりにModelsを呼び出しているようです。

どこが間違っているのか、何か考えはありますか?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 に答える