javascript原型与原型链

文章详细阐述了JavaScript中构造函数的作用,如何通过prototype属性设置实例的原型对象,并探讨了__proto__与Object.getPrototypeOf的关系。当实例对象找不到属性时,会查找原型链。此外,还解释了constructor属性如何指示实例与构造函数的关联。
摘要由CSDN通过智能技术生成

构造函数创建实例

let Person = function() {
  
}
Person.prototype.name = 'Person'

let person = new Person()
console.log(person.name) // Person

每个函数都有一个prototype属性,而这个属性是个对象,是通过这个构造函数创建的实例的原型对象。

let Person = function() {
  
}
Person.prototype.name = 'Person'

let person = new Person()
person.name = '小麦'
console.log(person.name) // 小麦

delete person.name

console.log(person.name) // Person

每个javascript对象(除了null)都有一个__proto__指向其构造函数的原型对象,即person.__proto__ === Person.prototype。

person.__proto__ === Person.prototype // true

__proto__来自于Object.prototype,与其说是一个属性,不如说是getter/setter。当使用 person.__proto__ 时,可以理解成返回了 Object.getPrototypeOf(person)。

Object.getPrototypeOf(person) === Person.prototype // true

当在实例上找不到属性或方法时会往它的原型对象上找,再找不到,会从原型对象的原型对象上找,直到找到为止,或找到尽头null,找不到则返回undefined。
构造函数的prototype对象的constructor指向了构造函数,即Person === Person.prototype.constructor。

Person === Person.prototype.constructor // true
person.constructor === Person //true

person本身没有constructor属性,但是它可以通过实例原型查找,Person.prototype里有指向构造函数的constructor,所以实例可以通过原型找到构造函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值