zoukankan      html  css  js  c++  java
  • prototype对象的真正作用

    参考阮一峰的文章:http://javascript.ruanyifeng.com/oop/encapsulation.html

    prototype对象的真正作用

    在JavaScript语言中,每一个对象都有一个对应的原型对象,被称为prototype对象。定义在原型对象上的所有属性和方法,都能被派生对象继承。这就是JavaScript继承机制的基本设计。prototype对象的作用,就是定义所有实例对象共享的属性和方法,所以它也被称为实例对象的原型,而实例对象可以视作从prototype对象衍生出来的。

    function Cat(name, color) {
      this.name = name;
      this.color = color;
      this.meow = function () {
        console.log('mew, mew, mew...');
      };
    }
    
    var cat1 = new Cat('大毛', '白色');
    var cat2 = new Cat('二毛', '黑色');
    
    cat1.meow === cat2.meow
    // false
    
    function Animal (name) {
      this.name = name;
    }
    
    Animal.prototype.color = "white";
    
    var cat1 = new Animal('大毛');
    var cat2 = new Animal('二毛');
    
    cat1.color  ===  cat2.color//true原型链

    “原型链”的作用在于,当读取对象的某个属性时,JavaScript引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。以此类推,如果直到最顶层的Object.prototype还是找不到,则返回undefined。

    举例来说,如果让某个函数的prototype属性指向一个数组,就意味着该函数可以用作数组的构造函数,因为它生成的实例对象都可以通过prototype属性调用数组方法。

    function MyArray (){}
    
    MyArray.prototype = new Array();
    MyArray.prototype.constructor = MyArray;
    
    var mine = new MyArray();
    mine.push(1, 2, 3);
    
    mine.length // 3
    mine instanceof Array // true

    Object.create方法

    Object.create方法用于生成新的对象,可以替代new命令。它接受一个对象作为参数,返回一个新对象,后者完全继承前者的属性,即前者成为后者的原型。

    var o1 = { p: 1 };
    var o2 = Object.create(o1);
    
    o2.p // 1

    上面代码中,Object.create方法在o1的基础上生成了o2。此时,o1成了o2的原型,也就是说,o2继承了o1所有的属性的方法。Object.create方法基本等同于下面的代码,如果老式浏览器不支持Object.create方法,可以用下面代码自己部署。

    另外可以参考一篇文章:https://segmentfault.com/a/1190000008739672

  • 相关阅读:
    Android 2.2 r1 API 中文文档系列(11) —— RadioButton
    Android API 中文 (15) —— GridView
    Android 中文 API (16) —— AnalogClock
    Android2.2 API 中文文档系列(7) —— ImageButton
    Android2.2 API 中文文档系列(6) —— ImageView
    Android 2.2 r1 API 中文文档系列(12) —— Button
    Android2.2 API 中文文档系列(8) —— QuickContactBadge
    [Android1.5]TextView跑马灯效果
    [Android1.5]ActivityManager: [1] Killed am start n
    Android API 中文(14) —— ViewStub
  • 原文地址:https://www.cnblogs.com/linux-centos/p/5566372.html
Copyright © 2011-2022 走看看