js原型及原型链

原型

在构造函数创建出来的时候,系统会默认帮构造函数创建一个原型对象。

原型的作用:

原型对象中的属性和方法可以被构造函数创建出来的对象访问。

如何访问构造函数的原型:

构造函数.prototyoe

属性(方法)的查找原则:

当访问对象的成员的时候,会在自身找有没有,如果有直接使用,

如果没有找到,则去当前对象的原型对象中找,如果找到了直接使用

如果没有找到,则去原型对象的原型对象中找,如果找到了直接使用

如果没有找到,继续向上查找,直到找到Object.prototype,如果没有属性则是undefined 方法则报错

通过对象访问原型:

_proto_属性(是一个非标准的属性,不推荐使用,主要用来做调试)

在使用新的对象替换掉默认的原型对象之后,原型对象中的constructor属性会变成Object,为了保证原型能正常访问,需要在原型上加一个constroctor 属性指向构造函数

 

原型继承:

  (1)利用原型中的成员可以被其他相关的对象共享这一特性,可以实现继承,这种实现继承的方式叫原型继承。

//1,给原型对象中添加成员   对象继承了原型对象
        function Person(name,age){
            this.name=name;
            this.age=age;
        }
        Person.prototype.sayHello=function(){
            console.log("我是person的方法");
         }
        var p = new Person("张三",2);
        p.sayHello();

   (2)直接替换原型对象来继承 (很可能会将原有原型中的成员丢失)

    function Person(name,age){
            this.name=name;
            this.age=age;
       }
      
       var Parent = {
           sayHello:function (){
               console.log("我是父类的方法");
           }

       }     
       Person.prototype= Parent;  
      var p = new Person("张三",2);
      p.sayHello();

(3)利用混入的方式给原型对象添加成员

  function Person(name,age){
           this.name=name;
           this.age=age;
       }
      
      var Parent = {
          sayHello:function (){
              console.log("我是父类的方法");
          }

      }     
      for(var k in Parent){
        Person.ptototpe[k] =Parent[k]
        }
      var p = new Person("张三",2);
      p.sayHello();

经典继承语法:

Object.create(obj)

 

Object.prototype 的成员:

1,constructor 

   原型对象的一个属性,指向该原型对象相关联的构造函数。

2,hasOwnProperty 

  用来判断对象本身是否拥有某个属性

3,propertyIsEnumerable

判断属性是否属于对象本身 ,判断属性是否可以被遍历。

4,toString 和  toLocaleString

都是转换成字符串,toLocaleString 是转化成本地的字符串,根据电脑的设置。

5,valueOf 

获取当前对象的值

     在对象参与运算的时候
         1.默认的会先去调用对象的valueOf方法,
         2.如果valueOf获取到的值,无法进行运算 ,就去去调用p的toString方法  最终做的就是字符串拼接的工作

6,__proto__

   可以使用 对象.__proto__ 去访问原型对象

instanceof 关键字

语法 :   对象 instanceof 构造函数

判断该构造函数的原型是否在该对象的原型链上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值