JavaScript中的原型概念

JavaScript中原型的存在很大程度上是对于内存的节省,因为如果JavaScript中没有原型的设定,就会有大量的方法根据实例的创建而创建,而很多的方法是该实例并不需要的但依然会被创建,每一个方法的创建都会开辟一个新的空间,这是对内存的极大消耗。

所以方法只存在于构造函数中,哪一个实例需要再去创建的想法就产生了,进而出现了原型这个概念

构造函数通过原型分配的函数是对所有对象共享的,不用再单独开辟内存空间了。
每一个构造函数内部都有一个prototype对象,我们需要把那些不变的方法放到这个prototype中,在通过实例调用这个方法的时候,这个方法只会创建一个,不会随着实例的创建而创建,大大节省了内存

	function Person(uname,age){
			this.uname = uname;
			this.age= age;
			//将方法放到原型对象中
			Person.prototype.sing = function(){
				console.log('会唱歌')
			}
		}
var lyq = new Person()
var kcy= new Person()

//说明指向的是同一个地址
console.log(lyq.sing() ===kcy.sing() )//返回true


再解释一下为什么创建的实例都能找到这个存储在prototype中的方法:

因为每一个创建的实例中有一个__proto__属性(这个属性是自动添加的),这个属性指向的就是构造函数中的prototype,正是因为这个__proto__的存在所以实例们才能找到prototype中的方法

在prototype与__proto__中有一个同样的属性constructor,这个属性是为了指明当前对象是引用了哪一个构造函数

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值