2012-07-01 13 views
7

स्पष्ट रूप से __proto__ संपत्ति का उपयोग प्रोटोटाइप श्रृंखलाओं में हेरफेर करने का मुख्य तरीका है, भले ही यह मानक अनुरूप नहीं है और आईई इसका समर्थन नहीं करता है। यद्यपि आप new कन्स्ट्रक्टर के उपयोग के माध्यम से विरासत भी बना सकते हैं, यह __proto__ संपत्ति या मानक अनुपालन Object.getPrototypeOf फ़ंक्शन की तुलना में एक अनावश्यक जटिलता की तरह लगता है।ईसीएमएस्क्रिप्ट मानक में कोई ऑब्जेक्ट.सेटप्रोटोटाइपऑफ (...) क्यों नहीं है?

संपादित करें:

के रूप में जवाब में कहा गया है, इस विधि मौजूद है अब (ES6 मानक)। हालांकि, प्रदर्शन चेतावनी से सावधान रहें: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

+5

अच्छी खबर। ऐसा लगता है कि Object.setPrototypeOf() ES6 में मिला है http://webreflection.blogspot.pt/2013/05/objectsetprototypeofo-proto-is-in-es6.html – banzomaikaka

उत्तर

7

यह ES6 सद्भाव मसौदा का हिस्सा है।

var proto = { 
    foo: 'bar' 
}; 

var object = {}; 

Object.setPrototypeOf(object, proto); 

console.assert(object.foo == 'bar'); 
2

Brendan Eich इस here का कहना है:

Object.setPrototypeOf होने वाला नहीं है। लिखने योग्य __proto__ एक लागू करने के लिए विशाल दर्द (चक्र-जांच में क्रमबद्ध होना चाहिए) और यह सभी प्रकार के प्रकार-भ्रम के खतरों को बनाता है। आपको लगता है कि आप इसे निम्न-स्तरीय तेज उपकरण के रूप में चाहते हैं। जेएस वह भाषा नहीं है। कक्षाओं और मिश्रणों के लिए उच्च-स्तरीय रूप अधिक बेहतर प्रतीत होते हैं और इसमें तेज किनारों को शामिल नहीं करते हैं।

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

मैं अब यह उपयोग कर रहा हूँ Chrome के नवीनतम रिलीज में:

+0

उत्तर के लिए धन्यवाद, हालांकि मुझे यह स्वीकार करना है कि मैं नहीं मानता इसे पूरी तरह से समझें। आपका विचार जावास्क्रिप्ट में गैर-प्रोटोटाइप आधारित विरासत को जोड़ना है? मेरे दिमाग में Object.setPrototypeOf बस प्रोटोटाइप ऑब्जेक्ट संदर्भ बनाएगा, इसलिए मुझे समझ में नहीं आता कि इसे क्रमबद्ध करने की आवश्यकता होगी। – JussiR

+6

लगता है जैसे वह गलत :) बस क्रोम में में मिल गया था: https://code.google.com/p/v8/source/detail?r=18685 और, यह पहले से ही Firefox में प्रयोगात्मक है: https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf – lucasarruda

+0

@Esailija 2017 में इस पर आपकी क्या राय है? जब आप प्रदर्शन और अनुकूलन (लिबियों में लिखते/योगदान करते हैं) में आपको "गंभीर" लगता है, इसलिए मैं जानना चाहता हूं कि आप क्या सोचते हैं। –

संबंधित मुद्दे