Javascript Prototypal Inheritance?

后端 未结 5 2020
日久生厌
日久生厌 2021-02-04 05:43

I\'been doing some inheritance in js in order to understand it better, and I found something that confuses me.

I know that when you call an \'constructor function\' with

5条回答
  •  庸人自扰
    2021-02-04 05:56

    1) Why if all new objects contain a reference to the creator function's prototype, fido.prototype is undefined?

    All new objects do hold a reference to the prototype that was present on their constructor at the time of construction. However the property name used to store this reference is not prototype as it is on the constructor function itself. Some Javascript implementations do allow access to this 'hidden' property via some property name like __proto__ where others do not (for example Microsofts).

    2) Is the inheritance chain [obj] -> [constructor] -> [prototype] instead of [obj] -> [prototype] ?

    No. Take a look at this:-

    function Base() {}
    Base.prototype.doThis = function() { alert("First"); }
    
    function Base2() {}
    Base2.prototype.doThis = function() { alert("Second"); }
    
    function Derived() {}
    Derived.prototype = new Base()
    
    var x = new Derived()
    
    Derived.prototype = new Base2()
    
    x.doThis();
    

    This alerts "First" not Second. If the inheritance chain went via the constructor we would see "Second". When an object is constructed the current reference held in the Functions prototype property is transfered to the object hidden reference to its prototype.

    3) is the 'prototype' property of our object (fido) ever checked? if so... why is 'deathBite' undefined (in the last part)?

    Assigning to an object (other than a Function) a property called prototype has no special meaning, as stated earlier an object does not maintain a reference to its prototype via such a property name.

提交回复
热议问题