js原型链之当我new一个构造函数时我做了啥

在这里插入图片描述
下面还有一句

Foo.a()

首先定义了一个构造函数Foo,但是还未执行。然后分别在Foo的原型对象和私有属性中添加了一个a方法,此时执行Foo.a()则先从私有属性中找,输出4.

注意

let obj=new Foo()

这个赋值语句会执行一次构造函数,而构造函数Foo()中第一条语句把Foo这个对象(我们可以把它看作一个普通的对象,构造函数也是一种对象)的私有属性a重新赋值,下一条赋值语句则是给obj添加了一个私有属性a,执行obj.a()时首先找到私有属性,打印的是2

function Foo(){
	Foo.a=function(){
	console.log(1)
	} //此时Foo.a已经指向了另一个函数,再执行Foo.a()时会打印1
	this.a=functon(){
	console.log(2)
	}//obj=new Foo()那么this就是obj,a是obj的私有属性,执行obj.a()时首先找到私有属性,打印的是2
}

另外 只有当使用new创建一个实例时,该实例才会继承构造函数原型上的属性,否则就只有构造函数本身的属性

总结
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值