2012-09-03 2 views
0

이 프로토 타입을 사용하는 비트 문제가 실패합니다. "Array.prototype.xyz" and "String.prototype.xyz"에 모두 정상적으로 작동합니다. 봇 (Bot)에 "Object.prototype.xyz"가있는 경우 믹스 인에 ExtJS이 포함 된 경우 동작이 잘못되었습니다. 의 ExtJS에서는 ExtJS 4 Object.prototype에는

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

오류 메시지 : 예 내 테스트 코드

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

그리고 : - 예. "Uncaught TypeError : 정의되지 않은 '$ childEls'속성을 읽을 수 없습니다"라는 메시지가 나타나면 을 처리합니다. - 아니요. 현재 믹스를 사용하고 있지 않습니다. - 예. 한 더미 패널 구성 요소를 사용하려고합니다.

질문 : Object 클래스 객체의 프로토 타입을 작성하는 간단한 해결책이 있습니까?

+0

코드는 어디에 있습니까? – timidboy

+1

당신은 바이올린을 만들 수 있습니까? – VDP

답변

0

문제는 내선 JS 라이브러리의 기본적인 방법 중 하나에서 유래이 증명 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 객체와 병합됩니다. mixin은 클래스 정의에서 객체 리터럴로 정의되므로 "doSomething"메소드가 승격됩니다. 각 속성을 가정하는 것은 기존의 클래스와 (mixins[name]이 "해봐요"방법입니다) mixins[name].self.$childEls에 액세스하려고 이상

그런 다음 Ext.util.ElementContainer#getClassChildEls에서 mixin 개체가 반복된다. 메서드에 self 속성이 없으므로 $childEls에 액세스하면 오류가 발생합니다.

모든 개체에서 사용할 수있는 개체가 필요한 경우 Object.doSomething 또는 Ext.Object.doSomething과 같은 정적 메서드로 씁니다.