面向对象的js

面向对象语言,就是掌握‘类’,‘对象’,‘实例’的相关知识以及他们间的关系。如‘类’的封装、继承和多态。
  • 对象:万物皆对象,各种事物都可成为我们的研究对象。
  • 类:对具有相同属性的各对象的共同部分进行分类、提取,封装。如‘人’这个类中,‘性别’就是人的属性之一。
  • 实例:从类中派生出来的就称为实例。实例既有自己的私有属性,也有从类中继承来的公有属性。
js中类的封装、继承和多态
  • js中类的实现是通过原型和原型链实现的
    1.1, 原型:每一个函数数据类型的值,都含有prototype(原型)属性(这个属性是天生自带的)。这个属性值是一个对象,用来存储实例的公用属性和方法。
    1.2, 在prototype这个属性对象中,都包含一个constructor属性(也是天生自带),这个属性指向函数本身。(类似于C++中的构造器)
    1.3, 每一个对象数据类型的值,都含有私隐原型属性’proto’,该值指向对象所属类的原型(prototype)
    2.1, 原型链:每个对象都含有私隐原型__proto__,并且指向所属类的原型,所以每个对象都会通过原型这个属性与上级连接,我们就把这种通过原型属性进行连接的方式叫做原型链。
    2.2, 原型链的查找机制:先在自己的私有属性上查找,没有找到就通过__proto__这个属性向自己所属类的原型prototype进行查找,如果没有再通过原型的__proto__继续向上寻找,直到寻找到基类Object.prototype为止。(Object为基类,所以它的__proto__为null)。
    3.1, 这种原型链的查找机制也就是js中类的继承和多态的实现机制,如下:
    例子1:

    function Person(name, age){
        this.name = name
        this.age = age
    }
    Person.prototype.speak = function(){
      console.log('i can speak chinese') 
    }
    let p1 = new Person('小明',18)
    p1.speak = function(){
      console.log('i can speak english') 
    }
    console.log(p1.speak()) //  'i can speak english'
    let p2 = new Person('小红',22)
    console.log(p2.speak()) //  'i can speak chinese'
    

    例子2:
    原型链模式.png

  • 通过hasOwnProperty可以检查某个属性是否为该对象的私有属性

let ary = [1,2,3]
console.log(arr.hasOwnProperty('push')) // false 因为'push'是数组类(Array)的公有属性,而非当前实例'ary'的私有属性
  • 通过’in’可以检查某个属性是否为该对象具有的属性(包含公有和私有属性)
let ary = [1,2,3]
console.log('push' in ary) // true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值