js 对象方法(实例方法) 类方法 原型方法

js 对象方法(实例方法) 类方法 原型方法

function Animal() {
      //实例属性
      this.name = name || 'Animal';
      //实例方法
      this.sleep = function () {
        console.log(this.name + "正在睡觉")
      }
      this.play=function(play){
        console.log(this.name+'正在玩'+ play)
      }
    }
     //类方法
    Animal.eat = function (food) {
      console.log(food)
    }
    //原型方法
    Animal.prototype.play = function (play) {
      console.log(play)
    }

    //test1 类调用方法
    Animal.eat('food')//food  可以调用类方法
    console.log(Animal.name)//Animal 可以调用实例属性
    Animal.play('warter') //not a function 不能调用原型方法
     Animal.sleep()//not a function  不能调用实例方法

    //test2 new实例化后调用方法
    let Cat = new Animal();
    console.log(Cat.name) //Animal 可以调用实例属性
    Cat.play('warter') //可以调用原型方法(实例方法会覆盖原型方法  优先级高于原型)
    Cat.sleep() //可以调用实例方法
    Cat.eat('food') //不可以调用类方法

自我总结:

  1. 写在原型中的方法可以被所有的实例共享, 实例化的时候不会在实例内存中再复制一份,占有的内存消耗少。
  2. js中每个函数都有一个prototype属性,这个属性指向一个对象(所有属性的集合:默认constructor属性,值指向这个函数本身。)
  3. 每个原型对象都属于对象,所以它也有自己的原型,而它自己的原型对象又有自己的原型,所以就形成了原型链。
  4. 一个对象的隐式原型指向构造这个对象的构造函数的显式原型,所以这个对象可以访问构造函数的属性和方法。(new一个实例)
  5. js的继承也就是通过原型链来实现的,当访问一个对象的属性,如果这个对象本身不存在,则沿着__proto__依次往上查找,如果有则返回值,没有则一直到查到Object.prototype的__proto__的值为null.

console.log(Cat.proto.proto.proto)//null
Cat.__proto__等于Animal.prototype ,
Animal.prototype.__proto__等于Object.prototype.

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值