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

  • 相关阅读:
    easyui tree 搜索
    easyui combotree不让父级选中
    jquery设置按钮disabled
    JavaScript中清空数组的三种方式
    JavaScript 与 PHP 的语法区别
    URL参数转换对象
    easyui form validate总是返回false原因
    jquery文字填写自动高度
    SQL Server 附加数据库提示5120错误
    jQuery – 鼠标经过(hover)事件的延时处理
  • 原文地址:https://www.cnblogs.com/linux-centos/p/5566372.html
Copyright © 2011-2022 走看看