构造函数 new的过程

js 构造函数 new的过程

神奇的new

当使用 new运算符创建一个对象时会把实例对象上 this 的值和方法都深复制一份给新创建对象,同时把实例对象的原型作为新创建对象原型(新创建对象有能力修改实力对象的原型的属性)。

测试1
function Person(name){
	this.name = '小明';
	age = '123';
	this.car = 'BBA';
	this.sum = function(){alert(this.name)}
}
Person.prototype.color = 'red'
function Per(){
	this.name = '小花'
}
Per.prototype = new Person();
var f1 = new Per();
var f2 = new Per();
console.dir(f1)
/*Per
	name: "小花"
	__proto__: Person
		car: "BBA"
		name: "小明"
		sum: ƒ ()
		__proto__:
			color: "red"
			constructor: ƒ Person(name)
			__proto__: Object */

f1 函数name属性来自 Per构造函数的 name 属性,f1的原型上有car、name属性继承于Per构造函数的原型(new Person), f1原型的原型上有一个color属性继承了Person的原型

测试2
	f1.name = '小军';
	console.log(f1.name) //小军
	console.l0g(f2.name) //小花
	
	f1.__proto__.car = 'JILI';
	console.log(f2.__proto__.car) // JILI

由此可见构造函数new出来的新对象修改原型会污染其他实例出来的对象的原型

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值