JavaScript对象

原型

  • 基于原型的语言:JavaScript使用原型继承,而不是经典继承。
  • 每个对象的原型:每个对象都有一个原型对象,也称为__proto__(尽管__proto__是内部属性,不推荐直接使用,标准方式是通过Object.getPrototypeOf())。
  • 原型链:当访问对象属性时,JavaScript会沿着原型链向上搜索,直到找到属性或到达原型链的末尾。
  • 函数对象的原型:每个函数对象都有一个prototype属性,指向该函数的原型对象。原型的constructor属性指向函数对象本身。
  • 构造函数:用于创建对象实例的特殊函数对象,常使用this来定义对象的属性。

实例

  • 创建实例:使用new关键字调用构造函数时,会创建一个新对象,并将其与构造函数的原型关联起来。
  • __proto__指向
    • 实例:指向构造函数的原型对象。
    • 函数对象:指向所有函数对象的原型(包含apply()call()等方法),该原型的构造函数是Function
    • 一般对象:指向所有对象的内置原型(包含toString()hasOwnProperty()等方法),该内置原型的构造函数是Object
    • 内置对象的__proto__指向null

定义对象

  • 对象字面量:使用大括号和键值对定义。
  • 构造函数:使用构造函数定义对象,但每个实例都有方法的副本,占用内存。推荐将方法定义在原型上。
  • class:ES6引入的语法糖,定义类和继承,背后是原型继承。

继承

  • 原型链继承:子类原型指向父类实例,所有子类实例共享同一个父类实例。
  • 构造函数继承:子类构造函数中调用父类构造函数,只能继承父类实例属性和方法。
  • 组合继承:同时采用原型链继承和构造函数继承,但会重复调用父类构造函数。
  • 原型式继承:使用Object.create()实现对象的浅拷贝继承。
  • 寄生式继承:在原型式继承的基础上添加新属性。
  • 寄生组合式继承:结合组合继承和原型式继承,减少一次父类构造函数的调用,是ES6中Class继承的实现方式。

this 对象

  • 上下文环境:函数运行时会产生上下文环境,this指针指向该环境。
  • 绑定规则
    • 默认绑定:直接调用函数,this指向全局对象(非严格模式下)或undefined(严格模式下)。
    • 隐式绑定:函数作为对象的方法调用,this指向调用它的对象。
    • new绑定:使用new调用函数,this指向新创建的实例对象。
    • 显示绑定:使用apply()call()bind()改变this的指向。
    • 箭头函数:不绑定自己的this,继承外层函数的this值(编译时绑定)。

优先级

this的绑定优先级:new绑定 > 显示绑定(apply()call()bind())> 隐式绑定 > 默认绑定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值