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



    
    
    一日之计在于晨
  • 相关阅读:
    Java的参数传递是「按值传递」还是「按引用传递」?
    算法08 五大查找之:二叉排序树(BSTree)
    算法07 五大查找之:索引查找
    算法06 五大查找之:二分查找
    Django rest_framework实现RESTful API
    jenkins + pipeline构建自动化部署
    jenkins部署.net平台自动化构建
    python实现编写windows服务
    iis部署python运行环境
    Jenkins执行批处理文件、powershell失败
  • 原文地址:https://www.cnblogs.com/1998Archer/p/12433786.html
Copyright © 2020-2023  润新知