मूल रूप से, मेरे पास है इस तरह एक निर्माता:एक निर्माता के सभी तर्क पासिंग
function A() {
this.content = toArray(arguments); // toArray converts it to an array
}
मैं इसे एक और समारोह से कॉल करने के लिए करना चाहते हैं:
function B() {
return new A();
}
समस्या नहीं, मैं होता है B
पर A
तक के सभी तर्कों को पारित करना पसंद है।
मैं apply
उपयोग कर सकते हैं नहीं (एक आम रास्ते में):
- यह एक निर्माता नहीं होगा अगर मैं सिर्फ
apply
यह किसी भी पुराने वस्तु को - मैं नहीं करने के लिए
apply
यह कर सकते हैंprototype
, जब तक कि इसे क्लोन करने का कोई आसान तरीका न हो, मुझे - के बारे में पता नहीं है, मैं इसे फिर से पास करने के लिए
new A
नहीं बना सकता; हकीकत में,A()
फेंकता है अगर यह किसी भी तर्क को पारित नहीं किया गया है, और मैं इस कार्यक्षमता को रखना चाहता हूं।
मैं कुछ समाधान के साथ आए हैं:
एक और निर्माता!
function C() {} C.prototype = A.prototype; function B() { var obj = new C(); A.apply(obj, arguments); return obj; }
एक और समारोह!
function _A(_arguments) { if(_arguments.length === 0) { return this; } // Do initialization here! } _A.prototype.constructor = A; function A() { if(arguments.length === 0) { throw new Error("That's not good."); } return new _A(toArray(arguments)); } function B() { return new _A(toArray(arguments)); }
उनमें से बाकी काफी हैं एक अलग स्वरूप
लेकिन वहाँ एक बहुत आसान है और स्पष्ट तरीका यह है है में एक ही बात?
साथ 'Object.create' एकदम सही है। धन्यवाद! – Ryan
@minitech: आपका स्वागत है। –