zoukankan      html  css  js  c++  java
  • JavaScript原型(第五天)

    避免对象重复使用,有时候js中会用到原型

    function Person(){

      name="test";

      age=123;

    }

    var car={

     price=10000;

    }

    Person.prototype.car=car;

    var person=new Person();

    console.write(person.car.price);

    //上面的代码中所有以后使用构造函数创建出来的新的Person对象访问car的时候都用的是用一个对象,而不像动态给person对象添加属性一样(使用的是不同对象),这样避免了内存开销。

    原型使用上的注意点,对象访问属性的时候,首先到自身对象定义上去查找,如果没有查找到相应的属性,则去构造函数的原型上去查找。但如果给属性赋值,则不会去原型上去查找,这就是说,通过实例对象不会将原型属性覆盖。

    person.car={};//这不会影响原型,而是动态给person对象添加了一个car属性;

    构造函数的原型上有两个属性,contructor及__proto__,前者是构造函数,后者是原型自己;

    也就是说Person与contructor相等,这样我们就得出一个结论

    var p=new Person();与var p=new person.contructor();是同样的效果;

    Person.prototype===p.__proto__;

    这是系统默认的,尽量不要修改;

    这样就使得我们在为原型赋值的时候最好手动赋值这个属性;

    Person.prototype={

      constructor:Person; 

    }

    使用原型,我们可以对js中的内置对象进行增强(给内置对象添加属性和方法)

    var arr=[];

    这时候如果想使用原型增强arr对象的方法

    Array.prototype.func={};//这种方法不被推荐,因为可能会造成干扰,项目由多个人参加,每个人都在内置的对象上添加属性是不安全的。

    function Arr(){

    };

    Arr.prototype=new Array();

    这样Arr对象就有了所有Array的方法及属性,我们可以通过给Arr添加属性和方法来增强内置对象Array;

    这种可以说是使用原型的方式来实现继承;

    经典的继承方法:Object.create(obj);

    创建出来的对象就会自动继承obj;

    原型链的基本结构

    我们自定义的对象有原型,而这个原型是通过Object创建出来的。Object构造仍然有原型,Object.prototype。而object原型的构造及原型均为null;

    Object.prototype中有valueof成员,所以所有的对象在参与运算的时候会尝试调用valueof方法,如果无法获取,则会调用tostring()方法进行字符串拼接;

  • 相关阅读:
    childnodes 兼容性问题
    1,点我呜呜,不点哈哈 2,定时器
    js中的request
    变背景图片位置
    linq contain和orderby
    VueMusic-5首页-音乐榜单
    VueMusic-4首页-视图适配
    VueMusic-3.-今日推荐-视图适配
    lodash---1.使用实列
    VueMusic-2.今日推荐-数据获取
  • 原文地址:https://www.cnblogs.com/ljs0322/p/8995325.html
Copyright © 2011-2022 走看看