2012-02-11 14 views
-1

javascriptで抽象クラスを拡張する必要があります。 私はJavascriptを購入しました。The Definitive Guide - O'Reilly jpにOOPのいくつかの例があります。 私は抽象クラスを拡張するために例の1つを実行しようとしましたが、 が "AbstractSet.extendは関数ではありません"と表示されます。 誰かが私に問題の理解を助けることができますか? おかげ抽象クラスの問題を拡張する - javascript

function abstractmethod() { throw new Error("abstract method"); } 

function AbstractSet() { throw new Error("Can't instantiate abstract classes");} 
AbstractSet.prototype.contains = abstractmethod; 

var NotSet = AbstractSet.extend(
    function NotSet(set) { this.set = set; }, 
    { 
     contains: function(x) { return !this.set.contains(x); }, 
     toString: function(x) { return "~" + this.set.toString(); }, 
     equals: function(that) { 
      return that instanceof NotSet && this.set.equals(that.set); 
     } 
    } 
); 

--- Firebugのコンソール AbstractSet.extend機能 ないに等しい:機能(すなわち){

答えて

1

を従ってJavaScriptのextend方法、エラーなしバニラはありません。

このコードは本から直接コピーされていますか?著者はjQuery's extend methodを参照していますか?

+0

いいえ、 "Core Javascript"セクションにあります:(私はそれらがecmascript 5に関連していると思いますし、私のブラウザ(FF 10.0.1)は完全なecmascript 5に準拠しています(http://kangax.github。 com/es5-compat-table /)answareに感謝します。:-) – franco

+0

これは私がしていないものです。 'extend'は、JavaScript実装ではなく、ES5でさえも確実にはありません。 'extend'は典型的にライブラリによって追加され、プロトタイプ鎖をコートする(多くの人は醜いと思うが、私は彼自身には統語的な砂糖ではない。 – swaggler

+1

Uhm ...オクラホマ、それは明らかです。 :-) – franco

関連する問題