• 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]]方法想象成链条,就形成了一条原型链。



    
    
    一日之计在于晨
  • 相关阅读:
    《数据结构》2.2顺序表(sequence list)
    《算法竞赛入门经典》6.3.1二叉树-小球下落
    java_时间戳与Date_相互转化
    java事物
    Mysql如何向存在外键的数据表中插入数据
    git基本配置
    mysql时间属性之时间戳和datetime之间的转换
    【转】变量命名(简短且无歧义)
    【转】mybatis实战教程(mybatis in action),mybatis入门到精通
    [转]DAO层,Service层,Controller层、View层
  • 原文地址:https://www.cnblogs.com/1998Archer/p/12433786.html
Copyright © 2020-2023  润新知