2011-12-20 17 views
11

誰かがJavaScriptでprototype.init機能の重要性を説明してもらえますし、それは、オブジェクトのインスタンス化時に呼び出されたとき?JavaScriptのprototype.initの狂気

は、なぜあなたは空の関数で上書きするのでしょうか?私はウェブブック用のJavaScriptを読んでいますし、過去数時間のために、この上で立ち往生しています

...どのようなコードの一部が実現することになっていますか?

var Class = function(){ 

var klass = function(){ 
    this.init.apply(this, arguments); 
}; 

klass.prototype.init = function(){}; 

// Shortcut to access prototype 
klass.fn = klass.prototype; 

// Shortcut to access class 
klass.fn.parent = klass; 

... 
} 

これは私のためにあまりにも多くの魔法です... :)

答えて

12

あなたが理解していないことはわかりません。 initは、単に他のどのようなメソッドでも、コンストラクタで、そしてコンストラクタと同じパラメータで呼び出されます。それが空の場合は、それを書いた人が今のところ何かを入れる必要はなく、彼のクラスの基礎を築きたいと思ったからです。実際

function Foo(a, b, c) { 
    this.init.apply(this, arguments); //This simply calls init with the arguments from Foo 
} 

Foo.prototype.init = function(a, b, c) { 
    console.log(a, b, c); 
} 

var f = new Foo(1, 2, 3); //prints 1 2 3 

http://jsfiddle.net/Hmgch/

+0

を逃しました。 'init'はJavaScriptでは特別ではありません。この 'init'関数にコンストラクタ作業を委譲するのは、この著者の奇妙な選択です。 – Domenic

+1

ありがとうございます。私は2001年以来JSをやっていない...それはしばらくしていたし、これらの事はそれほどではなかった:)私が本当に驚いたのは、initがデフォルトでオブジェクト作成において重要だったという私の誤解である。著者は助けにならない奇妙な用語を使用します... – Moonwalker

+0

@ムーンウォーカー実際には、言語は多く進化しています –

2

達成することになったコードの部分は何ですか?

混乱。

var Class = function() { 
    // initialization logic 
} 

// Shortcut to access prototype 
Class.fn = klass.prototype; 

// Shortcut to access class 
Class.fn.constructor = Class; 
+0

- あなたの心が円に行くを開始...クラスレベルおよびインスタンスメソッドで静的メソッドについての著者の話..私はprototype.constructorは同様に絶対的にゼロな意義を持って理解して何から試作品レベルで - それは後方少し.... – Moonwalker

+0

@Moonwalker 'prototype.constructor'がメタプログラミングのために非常に重要であるであるように聞こえます。たとえば、 'instance2では=新しい(instance1.constructor)();' – Raynos

+0

私は、これは正確に右であるthat..thx – Moonwalker

関連する問題