<i id='LYF5t'><tr id='LYF5t'><dt id='LYF5t'><q id='LYF5t'><span id='LYF5t'><b id='LYF5t'><form id='LYF5t'><ins id='LYF5t'></ins><ul id='LYF5t'></ul><sub id='LYF5t'></sub></form><legend id='LYF5t'></legend><bdo id='LYF5t'><pre id='LYF5t'><center id='LYF5t'></center></pre></bdo></b><th id='LYF5t'></th></span></q></dt></tr></i><div id='LYF5t'><tfoot id='LYF5t'></tfoot><dl id='LYF5t'><fieldset id='LYF5t'></fieldset></dl></div>

    <bdo id='LYF5t'></bdo><ul id='LYF5t'></ul>

  1. <tfoot id='LYF5t'></tfoot>
  2. <legend id='LYF5t'><style id='LYF5t'><dir id='LYF5t'><q id='LYF5t'></q></dir></style></legend>

      <small id='LYF5t'></small><noframes id='LYF5t'>

      Javascript之旅 对象的原型链之由来

      时间:2023-12-09

        <small id='oSuLL'></small><noframes id='oSuLL'>

            <tbody id='oSuLL'></tbody>
          <tfoot id='oSuLL'></tfoot>
        1. <legend id='oSuLL'><style id='oSuLL'><dir id='oSuLL'><q id='oSuLL'></q></dir></style></legend>
          <i id='oSuLL'><tr id='oSuLL'><dt id='oSuLL'><q id='oSuLL'><span id='oSuLL'><b id='oSuLL'><form id='oSuLL'><ins id='oSuLL'></ins><ul id='oSuLL'></ul><sub id='oSuLL'></sub></form><legend id='oSuLL'></legend><bdo id='oSuLL'><pre id='oSuLL'><center id='oSuLL'></center></pre></bdo></b><th id='oSuLL'></th></span></q></dt></tr></i><div id='oSuLL'><tfoot id='oSuLL'></tfoot><dl id='oSuLL'><fieldset id='oSuLL'></fieldset></dl></div>

            • <bdo id='oSuLL'></bdo><ul id='oSuLL'></ul>
              1. (一)对象的原型链由来

                在 JavaScript 中,每个对象都有一个原型对象。原型对象充当着对象的模板,它包含了常用的属性和方法,子对象可以通过原型链继承这些属性和方法。 每个对象都可以通过__proto__属性访问它的原型对象,对象的原型对象也可以拥有自己的原型对象,这就是所谓的原型链。

                但是,面对大量对象,JavaScript 在内存中会保存很多原型对象,这样会导致内存浪费。为了解决这个问题,JavaScript 引入了 prototype 属性,用来指定一个构造函数的原型对象,这样所有通过该构造函数创建的对象都会共享一个原型对象,从而达到节约内存的效果。

                (二)实现原型继承的两种方式

                在 JavaScript 中,实现原型链有两种方式:构造函数式和对象字面量。

                1.构造函数式

                构造函数式是定义一个函数作为构造函数,再通过 new 关键字创建一个对象的方式,实现原型继承。

                例如:

                // 构造函数式原型链继承
                function Animal() {
                  this.species = 'mammal'
                }
                function Cat(name, color) {
                  Animal.call(this)   // 把 Animal 的实例属性添加到 Cat 中
                  this.name = name
                  this.color = color
                }
                let cat1 = new Cat('Tom', 'black')
                console.log(cat1.species)  //输出 mammal
                

                在这个例子中, Animal 和 Cat 是两个构造函数,用 call 方法将 Animal 的实例属性添加到 Cat 中,从而实现原型链继承。

                2.对象字面量

                对象字面量是直接使用对象字面量表示对象,通过指定原型对象属性来实现原型继承。

                例如:

                let animal = {
                  species: 'mammal'
                }
                let cat = {
                  name: 'Tom',
                  color: 'black'
                }
                cat.__proto__ = animal; // 指定 cat 对象的原型对象为 animal 对象
                console.log(cat.species);  //输出 mammal
                

                在这个例子中, animal 对象是一个具有 species 属性的普通对象, cat 对象继承了 animal 对象的所有属性,因为它的原型对象被指定为 animal 对象。

                (三)总结

                在 JavaScript 中,原型链是实现原型继承的关键,每个对象都有一个__proto__属性,用于访问它的原型对象。原型链的继承方式有两种,一种是通过构造函数式,另一种是通过对象字面量。无论是哪种方式,只要实现了正确的继承方式,就可以达到代码复用和内存节省的目的。

                上一篇:JavaScript 图像动画的小demo 下一篇:js实现一个逐步递增的数字动画

                相关文章

                  <bdo id='azPnL'></bdo><ul id='azPnL'></ul>
                <i id='azPnL'><tr id='azPnL'><dt id='azPnL'><q id='azPnL'><span id='azPnL'><b id='azPnL'><form id='azPnL'><ins id='azPnL'></ins><ul id='azPnL'></ul><sub id='azPnL'></sub></form><legend id='azPnL'></legend><bdo id='azPnL'><pre id='azPnL'><center id='azPnL'></center></pre></bdo></b><th id='azPnL'></th></span></q></dt></tr></i><div id='azPnL'><tfoot id='azPnL'></tfoot><dl id='azPnL'><fieldset id='azPnL'></fieldset></dl></div>
                  <tfoot id='azPnL'></tfoot>

                  <small id='azPnL'></small><noframes id='azPnL'>

                    <legend id='azPnL'><style id='azPnL'><dir id='azPnL'><q id='azPnL'></q></dir></style></legend>