0

使用中にプロトタイプを使用するには少し問題がありますframework ExtJS version 4.1.1.

ExtJSをロードする前に、最初にプロトタイピングを作成しました。"Array.prototype.xyz" and "String.prototype.xyz"すべてうまくいきます。のミックスインインクルージョン"Object.prototype.xyz"には悪い動作がありExtJSます。私のテストコードの例:

Object.prototype.doSomething = function() {
  console.log('I do it!');
}
var a = {};
a.doSomething();

ExtJSからのエラーメッセージ:

Uncaught TypeError: Cannot read property '$childEls' of undefined
And break.

はい。「Uncaught TypeError:未定義のプロパティ'$ childEls'を読み取ることができません」がないと、正常に動作します。-いいえ。現在、他のミックスインは使用していません。- はい。ダミーパネルコンポーネントを1つだけ使用しようとしています。

質問:Objectクラス-objectでプロトタイプを作成するための簡単な解決策はありますか?

4

1 に答える 1

0

この問題は、Ext JS ライブラリの基本的なメソッドの 1 つに起因しています。Ext.merge

これを証明するのはとても簡単です:

Object.prototype.doSomething = function(){ console.log("Does something"); };

var emptyObj = {};
console.log(emptyObj.hasOwnProperty("doSomething"));  // Prints "false"

var mergeObj = Ext.merge({}, {a: "b"});
console.log(mergeObj.hasOwnProperty("doSomething"));  // Prints "true"

Ext.merge基本的に、 (またはExt.apply) がオブジェクト リテラルで呼び出されるたびに、プロトタイプ メソッドがプロトタイプ チェーンに「昇格」されます。パネル (実際には任意のコンポーネント) を作成しようとすると、クラスmixinオブジェクトがそのプロトタイプのオブジェクトとマージされmixinます。ミックスインはクラス定義でオブジェクト リテラルとして定義されているため、「doSomething」メソッドが昇格されます。

次にExt.util.ElementContainer#getClassChildElsmixinオブジェクトは、各プロパティが既存のクラスであると仮定して反復処理され、アクセスを試みます( 「doSomething」メソッドはmixins[name].self.$childElsどこにありますか)。mixins[name]メソッドにはselfプロパティがないため、アクセスする$childElsとエラーがスローされます。

すべてのオブジェクトで利用可能なオブジェクトが必要な場合は、Object.doSomethingまたはのような静的メソッドとして記述しますExt.Object.doSomething

于 2012-09-06T23:50:07.567 に答える