2012-03-14 6 views
3
var Editor = {}; 

Editor.Basic = function(obj) { 
    this.config ={ 
     value: obj 
    } 
}; 

Editor.Basic.prototype = { 
    getValue: function() { 
     return this.config.value; 
    } 
}; 

Editor.Advanced = function(obj) { 
    Editor.Basic.call(this, obj); 
}; 

Editor.Advanced.prototype = { 
    config: { 
     notValue: !this.config.value 
    } 
}; 

var extendByPrototype = function(obj1, obj2) { 
    for (var key in obj2.prototype) { 
     if (obj2.prototype.hasOwnProperty(key) && obj1.prototype[key] === undefined) 
      obj1.prototype[key] = obj2.prototype[key]; 
    } 
}; 

extendByPrototype(Editor.Advanced, Editor.Basic); 

그들을 무시하는 대신 (재귀 물론) 기존 개체를 확장 할 Editor.Advanced.prototype를 얻을 수 어쨌든 있나요?프로토 타입 상속 및 확장 기존 개체

을 (extendByPrototype에서 보는 바와 같이) 나는 obj1.prototype[key] !== undefined을 확인 할 알고,하지만 난 생성자에 Editor.Advanced.prototype에서 config를 이동하고 push 기능을 사용하지 않고, 일반적인 방법으로 기존의 키를 확장해야 할 것과 확실하지 오전 .

+0

jQuery는 (평범한) 알고리즘을 가지고 있습니다. – Raynos

+0

잠깐만. Class 객체가 인스턴스 객체를 확장하도록 만드는 방법이 있는지 묻는 중입니까? Editor.Advanced.prototype = {...}을 어떻게 설정하는지? –

답변

-1

JavaScript에서 Object를 확장하는 올바른 방법은 Object.create(prototype)입니다. 이 방법으로 생성 된 객체는 적절한 상속 설정을 갖습니다. 어떤 객체의 프로토 타입을 얻으려면 Object.getPrototypeOf(object)을 사용합니다.

Object.create(prototype)은 JavaScript 1.8.5에서 새로 추가되었습니다. 당신은 이전 버전과 호환을 찾고 있다면, 당신은 표준이 아닌 방법을 그 후

function extend(child, supertype) { 
    child.prototype.__proto__ = supertype.prototype; 
} 

extend(Animal, Lifeform); 
extend(Plant, Lifeform); 

var anOnion = new Plant(); 

를 사용해야합니다, 당신은 내 ...

object.contructor.__proto__ 

자세한 내용 프로토 타입 객체에를 얻을 수 있습니다 __proto__ 여기에 : https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/proto

+0

문제가 해결되지 않음 – Raynos

+0

아무도이 예제를 참조로 사용하면 안됩니다. – mate64