zoukankan      html  css  js  c++  java
  • 原型继承

    Javascript对象(如robot)拥有自有属性(如通过构造函数this.name=name设置的属性)和继承属性(例如代理自Robot.prototype的属性)两种。

    在查询对象robot的属性age时,先查找robot中自有属性的age属性,如果没找到,则查找robot继承属性(也就是robot的原型对象:robot.__proto__)中的age属性,直到查找到age或者一个原型是null的对象为止.

    在给对象robot的age属性赋值时,如果robot自有属性中已经有一个属性age,则改变age的值,若robot中不存在自有属性age,只存在继承属性age或者所有属性中都没有age属性,则为robot创建一个自有属性age并为其赋值.

    也就是说,只有在查询时原型链才会起作用。赋值只针对自有属性.

    var Robot = function(name) {        //声明一个构造函数
                    this.name = name;
                    this.say = function(){
                                console.log(this.name)
                             }
                    };
    var info = { age: 12, gender: "boy" };
    Robot.prototype = info;
    
    var robot = new Robot("bower");
    
    console.log(robot);            //打印结果为Robot {name: "bower", say: function, age: 12, gender: "boy"}
    console.log('age' in robot);    //打印结果为true
    console.log(robot.hasOwnProperty('age'));    //打印结果为false
    
    robot.name = "cup";
    robot.age = 13;
    
    console.log(robot);            //打印结果为Robot {name: "bower", say: function, age: 12, gender: "boy"}
    console.log('age' in robot);    //打印结果为true
    console.log(robot.hasOwnProperty('age'));    //打印结果为true
    

    可以使用in 或者 hasOwnProperty 来判断对象中是否存在属性或者是否存在自有属性。

    function Robot(name){this.name=name};
    var robot =  new Robot("bower");
    console.log(robot.name);
    console.log(robot.age);
    Robot.prototype.age = 12;
    robot.name = "cup";
    console.log(robot.name);
    console.log(robot.age);

    上述代码的执行结果是?

    非常正确!你太棒了!

    当查询robot的age属性时,先查询自有属性,如果没有则查询原型对象的age属性,如果查询没有结果,则返回结果undefined.

    在执行Robot.prototype.age = 12这句代码之前,在robot的所有属性中是没有age属性的.所以本句代码执行之后,原型对象中就可以查询到age属性了.

  • 相关阅读:
    判断文件类型
    Kruskal算法
    《大话数据结构》冒泡排序错误修正
    COM组件(ActiveX)控件注册失败
    IP路由协议简析
    Prim算法
    邻接图的深度广度优先遍历
    矩阵图的深度广度遍历
    oracle spatial下对wkt字符串操作遇到srid的解决方案
    Arcgis Javascript中geometryEngine报错’hq‘of undefined的解决方法
  • 原文地址:https://www.cnblogs.com/web-chuanfa/p/9358591.html
Copyright © 2011-2022 走看看