zoukankan      html  css  js  c++  java
  • 1002,javascript的原型属性

    注意这个例子
    var obj = {};
    obj.toString(); //"{object object}"

    上面的例子中,我们声明了一个空对象,并没有为他添加toString属性方法,但是这个方法却可以被成功的调用并输出。
    原因在于javascript的对象都有一个内置的[[Prototype]]私有属性,这个属性指向另一个对象,我们称这个对象为原对象的原型。
    当js引擎访问obj的toString属性时,首先会去obj对象查找,发现找不着,就沿着obj的[prototype]属性去他的原型上查找。
    通过chrome开发者工具,我们可以看到这个obj圆形的真面目:
    javascript空对象的原型,由于obj的原型对象定义了一个toString属性。所以,空对象也可以使用toString这个属性方法。



    为什么要使用原型属性
    原型的意义在于实现属性的继承。
    eg,我们希望js的数字类型提供一个方法判断当前数字是否为奇数,没有原型的情况下,你只能这么做:
    var num = new Number(99);
    num.isodd = function(){return this % 2 !== 0};
    num.isodd(); //true
    但是这样是没有意义的,因为isodd()方法定义在num变量上面,其它的数字类型并不可以使用
    var num2 = new Number(100);
    num.isodd(); //num2.isodd is not a function;
    有了原型的概念后,由于所有的数字类型都指向了同一原型,我们可以把isodd方法定义在这个原型上,这样所有的数字类型就可以调用到这个方法了
    var num1 = 99,num2 = 100, num3 = 0;
    Number.prototype.isodd = function(){return this % 2 !== 0};
    num1.isodd();//true
    num2.isodd();//false
    num3.isodd();//false


    原型链(略)
    原型也不是一个特别的存在,他也只是一个普通的对象而已。换句话说,圆形也可以有属于他的原型。如果把对象的[[prototype]]方法想象成链条,就形成了一条原型链。



    
    
    一日之计在于晨
  • 相关阅读:
    C#用Infragistics 导入导出Excel
    C#基础---Attribute(标签) 和 reflect(反射) 应用二
    C#基础系列:反射笔记
    反射基础
    NPOI之Excel——合并单元格、设置样式、输入公式
    NPOI对Excel的操作(Sheet转DataTable、List<T>)
    【SVN版本回退】
    撤销修改
    iOS
    ios 排序汇总
  • 原文地址:https://www.cnblogs.com/1998Archer/p/12433786.html
Copyright © 2011-2022 走看看