JavaScriptの継承の問題
迷茫
迷茫 2017-07-05 10:47:40
0
3
662

コードは以下のように表示されます:

リーリー

Father の配列属性は Son1 と Son2 で共有されますが、name 属性は共有されません。私の理解では、son1 と Son2 の両方が Son.prototype に移動して name 属性を見つけることになります。name 属性もまた必要ですなぜですか? いいえ?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全員に返信 (3)
为情所困

配列は参照型であるため、father(new Father()),son1,son2,这三个实例来说,他们array保存的都是[]这个数组的引用,所以只要其中一个修改了,顺着引用找到内存中的数组就会修改,修改的就是同一个数组。而name = true,这个name是基本类型,在分别new实例的时候,会在内存中各开辟一块区域内存放它的值,因此上述三个实例的name对应的是不同内存区域的值,所以修改了就不会互相影响。
看来楼上的一些回答后,思考了一下,发现我的理解,我的答案是有错的。保留原答案,下面更正一下。
关于数组那一块没有问题,问题在name这个属性,对于son1,son2来说,他们是没有name这个属性的,所以在new的时候,应该是没有为他们的name开辟内存空间的。只有father这个实例有。
son1,son2name值是通过原型链查找找到的,如果对son1.name进行赋值,那么相当于给son1这个实例添加了name属性,当然再次打印son1.name时取到的值是属于son1的name值,而打印son2.name,则会去原型链上找name,这个时候找到的是Fathername值,因此两个值不同,可能会给你造成没有共用的错觉。
值得注意的是,如果son1.array[0] = 1这么赋值的话,那么对三个实例的array都会有影响,如果是son1.array = [1]の場合、そのような割り当ては行われません。これは、この時点で配列が新しい配列メモリ アドレス [1] への参照を保持しているためです。

いいねを押す+0
    学霸

    リーリー

    配列は共有されていると言いましたか?

    いいねを押す+0
      小葫芦

      属性は共有されないと書かれているのはなぜですか?name

      プロトタイプ チェーンの継承とは、プロトタイプ チェーンが見つかるまで検索し、見つからない場合は

      を返すことを意味します。undefined

      Son に値を代入すると

      リーリー

      この時点で、インスタンスの値が取得されます。 Son に対応する属性がない場合にのみ、プロトタイプ チェーンで検索されます。

      いいねを押す+0
        最新のダウンロード
        詳細>
        ウェブエフェクト
        公式サイト
        サイト素材
        フロントエンドテンプレート
        私たちについて 免責事項 Sitemap
        PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!