9

Object.getPrototypeOf(obj) और obj.constructor.prototype के बीच कोई अंतर है? या ये दोनों एक ही बात का संदर्भ दे रहे हैं?ऑब्जेक्ट.getPrototypeOf() जावास्क्रिप्ट में Object.constructor.prototype के समान है?

+1

आप सहायक प्रश्न और उत्तर उतार सकते हैं और अपने प्रश्नों को हल करने वाले उत्तरों को भी स्वीकार कर सकते हैं। यह एसओ को व्यवस्थित करने में मदद करता है और उन लोगों के लिए भी एक छोटा सा इनाम है जो आपकी मदद करते हैं। – hugomg

+1

@missingno उनके प्रश्न अब तक काफी रोचक हैं ... –

+1

@ imeimeidas: वह अभी भी "0%" बॉयलरप्लेट टिप्पणी के योग्य है हालांकि: पी – hugomg

उत्तर

9

नहीं

यह रिटर्न आंतरिक [[Prototype]]

जहां getPrototypeOf काम करता है का एक उदाहरण है, लेकिन .constructor.prototype नहीं है मूल्य।

उदाहरण के लिए:

var o = Object.create(null); 
Object.getPrototypeOf(o); // null 
o.constructor.prototype; // error 

var p = {}; 
var o = Object.create(p); 
Object.getPrototypeOf(o); // p 
o.constructor.prototype; // Object.prototype 

o.constructor.prototype केवल new ConstructorFunction या जहां आप मैन्युअल Prototype.prototype.constructor === Prototype संबंध स्थापित किया है के माध्यम से बनाया वस्तुओं के साथ काम करता है।

2

नहीं। विशेष रूप से, constructor किसी ऑब्जेक्ट की संपत्ति हमेशा उस पर सेट नहीं होती है जिसे आप "सही" मानेंगे। यह भी ठेठ मूलरूप विरासत परिदृश्यों के लिए विफल रहता है

function F() { } 
F.prototype = { 
    foo: "bar" 
}; 

var obj = new F(); 

assert.equal(obj.constructor.prototype, Object.prototype); 
assert.equal(Object.getPrototypeOf(obj), F.prototype); 

:

// G prototypally inherits from F 
function G() { } 
G.prototype = Object.create(F.prototype); 
// or: G.prototype = new F(); 

var obj2 = new G(); 

assert.equal(obj2.constructor.prototype, Object.prototype); 
assert.equal(Object.getPrototypeOf(obj2), G.prototype); 
assert.equal(Object.getPrototypeOf(Object.getPrototypeOf(obj2)), F.prototype); 

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

  • कोई संबंधित समस्या नहीं^_^