JavaScript:原型对象及原型链

原型对象及原型链

原型对象

我们创建的每一个函数都有一个隐含的属性prototype,这个属性对应着一个对象,即原型对象

function fun(){
	
}
console.log(typeof fun.prototype)			//object

用处

当函数以普通函数形式调用时,prototype属性没有用处

当函数以构造函数形式调用时,它所创建的对象中都有一个隐含的属性image-20200922232332244指向该构造函数的原型对象

function Person(name) {
    this.name = name
}
let per1 = new Person("Bob");
let per2 = new Person("Alice");
console.log(Person.prototype === per1.__proto__)		//true
console.log(per1.__proto__ === per2.__proto__)			//true

所以我们可以将同一个类的实例中的共有属性,统一设置在原型对象中

function Person(name) {
    this.name = name
}
let per1 = new Person("Bob");
let per2 = new Person("Alice");
Person.prototype.a = "aaa"
Person.prototype.sayName = function(){
	console.log(`Hello,${this.name}`)
}
console.log(per1.a)						//"aaa"			
per1.sayName()							//"Hello,Bob"
console.log(per2.a)						//"aaa"			
per2.sayName()							//"Hello,Alice"

原型链

当查找一个实例的属性时,如果这个实例中没有,就到该实例的原型中去找,如果还没有,就到该实例的原型的原型中去找,一直找到object的原型,如果object的原型还没有,就返回undefined,即:
实例——实例的原型——实例的原型的原型——Object的原型

hasOwnProperty()

通过hasOwnProperty()判断属性是否是实例本身的,而不是其原型中的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值