Relation between [[Prototype]] and prototype in JavaScript

后端 未结 3 1592
别跟我提以往
别跟我提以往 2020-12-04 10:12

From http://www.jibbering.com/faq/faq_notes/closures.html :

Note: ECMAScript defines an internal [[prototype]] property of the internal Object type. This

3条回答
  •  渐次进展
    2020-12-04 10:35

    I believe you are right in most cases.

    Every object has a hidden [[Prototype]] property, which is used for inheritance. Functions additionally have a public prototype property, which is used only when the function is used as constructor: When an object is constructed using new, the [[Prototype]] property of the new object is set to the prototype property of the function that was used as constructor.

    E.g.

    function C() {}
    C.prototype = P1;  
    var obj = new C();  // obj.[[Prototype]] is now P1.
    

    You can get the [[Prototype]] property using Object.getPrototypeOf(). (This method is specified in ECMAScript 5. Older versions of JavaScript does not have any standard way of reading [[Prototype]]).

    You can usually get to the prototype through the constructor, e.g.:

    obj.constructor.prototype == Object.getPrototypeOf(obj) 
    

    But this is not always the case, since the prototype property of the constructor function can be reassigned, but the [[Prototype]] of an object cannot be reassigned after the object is created. So if you do:

    C.prototype = P2;
    

    then

    obj.constructor.prototype != Object.getPrototypeOf(obj)
    

    Because the prototype of C is now P2, but [[Prototype]] of obj is still P1.

    Note that it is only functions that have a prototype property. Note also that the prototype property of a function is not the same as the [[Prototype]] property of the function!

提交回复
热议问题