javascript ECMAScript 原型

本文介绍了JavaScript中的对象概念,探讨了原型(prototype)的作用及其实现机制。文章通过实例对比了直接在构造函数中定义方法与利用原型链查找方法的区别,强调了后者对于节省内存资源的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习原型之前,我们需要了解面向对象照搬原话  

ECMA-262把对象定义为:“无序属性的集合,其属性可以包含基本值、对象、或者函数。”

这个定义很简单明了。对象就是数据的集合,由名-值对形式存在,值可以是任意类型。每个对象都是引用类型。

在javascript中 每创建一个对象是,都有一个prototype属性指向其继承的属性方法。这个prototype就是当前对象的原型。这跟作用域很相似,对应的页游一个原型链,当基类对象使用原型的方法时,对象会根据原型链一级一级的寻找。这个过程也是不可逆的。

同时,contructor也会随对象的创建而添加到属性上,指向拥有整个原型对象的函数或者对象。

function Test(){
}
Test.prototype.add=function(a,b){
	return  a+b;
}
var ts = new Test();
alert(ts.add(1,1))//2;
这个简单的栗子,Test函数的原型上定义了一个add的方法,在Test这个“类”上创建的对象可以使用原型的放法。这就像在Test对象上创建了一个方法一样,但这并不能这么简单的理解,而是prototype指向了原型对象,在原型对象上赋予了一个add的放法。

在工厂构造函数中 。栗子如下

function Test(name){
	this.name = name;
	this.sayhi = function(){
		alert(this.name);
	}
}
var ts1 = new Test("zhangsan");
var ts2 = new Test("lisi");
var ts3 = new Test("wangwu");
ts1.sayhi();//zhangsan
ts2.sayhi();//lisi
ts3.sayhi();//wangwu
这个栗子并没有什么特别。但是在创建对象的过程中,sayhi的方法被创建了三次。这意味着当有很多的对象被创建的时候,sayhi就创建很多次。造成大量资源被消耗。如果用原型的方法呢?栗子:

function Test(name){
	this.name = name;
}

Test.prototype.sayhi=function(){
		alert(this.name);
}

var ts1 = new Test("zhangsan");
var ts2 = new Test("lisi");
var ts3 = new Test("wangwu");
ts1.sayhi();//zhangsan
ts2.sayhi();//lisi
ts3.sayhi();//wangwu
这样,在创建基类对象的时候,所有调用sayhi方法都会通过原型链来搜索,从而避免被创建多次。

如有不对的地方,还望指出。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值