JAVASCRIPT定义对象的四种方式

本文详细介绍了JavaScript中四种不同的对象属性与方法封装技术,包括工厂方式、构造函数方式、原型方式和混合原型与构造函数方式。每种方式都有其特点与应用场景,通过对比分析帮助开发者更好地理解和选择适合的封装策略。
先写一个函数,下面几个方式会用到
Javascript代码
  1. functionshowSalary(){
  2. alert(this.salary);
  3. }



工厂方式
先创建对象,然后添加属性和方法,不需要用NEW创建对象,
如果把函数写在内部,每次调用都会创建新的函数,放在外面,封装性不好

Javascript代码
  1. functioncreateWorker(sAage,sSalary,sDepartment){
  2. varoWorker=newObject();
  3. oWorker.age=sAage;
  4. oWorker.salary=sSalary;
  5. oWorker.department=sDepartment;
  6. //创建函数的方式一,指向我们文章开头写好的函数名,缺点是函数在对象的外部,封装性不好
  7. oWorker.tellSalary=showSalary;
  8. //创建函数的方式二,在对象内部声明匿名函数,虽然封装在对象内部了,但没个对象会有不同的函数版本,浪费内存
  9. oWorker.tellSalary=function(){
  10. alert(this.salary);
  11. }
  12. returnoWorker;
  13. }
  14. varworker1=createWorker(24,1000,"Dev");
  15. worker1.tellSalary();
  16. varworker2=createWorker(24,3000,"Dev");
  17. worker2.tellSalary();


构造函数方式
在构造函数内部不创建对象,使用this关键字,创建时候用new操作符,如果把函数声明在内部,存在和工厂方式相同的问题,重复创建函数。为每个对象都创建独立的函数版本。放在外部,封装性不好

Javascript代码
  1. functionWorker(sAage,sSalary,sDepartment){
  2. this.age=sAage;
  3. this.salary=sSalary;
  4. this.department=sDepartment;
  5. //同工厂方式
  6. this.tellSalary=showSalary;
  7. //同工厂方式
  8. this.tellSalary=function(){
  9. alert(this.salary);
  10. }
  11. }
  12. varworker3=newWorker(24,1000,"Dev");
  13. worker3.tellSalary();
  14. varworker4=newWorker(24,3000,"Dev");
  15. worker4.tellSalary();


原型方式,创建对象时不能使用构造传递参数,必须先创建对象,然后改变属性的值

Javascript代码
  1. functionWorker(){
  2. }
  3. Worker.prototype.age=24;
  4. Worker.prototype.salary=1000;
  5. Worker.prototype.department="Dev";
  6. Worker.prototype.homeaddress=newArray("www","dd");
  7. //创建多个对象时,要想一想此处为什么不会和构造函数方式及工厂方式一样,创建多个函数的实例
  8. //要理解prototype的概念,prototype是父对象的一个实例
  9. Worker.prototype.tellSalary=function(){
  10. alert(this.age);
  11. }
  12. varworker5=newWorker();
  13. varworker6=newWorker();
  14. worker5.tellSalary();
  15. alert(worker5.homeaddress)
  16. //修改原型中引用类型的值,会影响到所有已经实例化的对象
  17. worker6.homeaddress.push("gg")
  18. alert(worker5.homeaddress)


混合原型和构造函数方式
可以传递参数构造对象,多个实例对象共享一个函数

Javascript代码
  1. functionWorker(sAage,sSalary,sDepartment){
  2. this.age=sAage;
  3. this.salary=sSalary;
  4. this.department=sDepartment;
  5. this.homeaddress=newArray("www","dd");
  6. }
  7. //只创建tellSalary函数一个实例,没有内存浪费
  8. Worker.prototype.tellSalary=function(){
  9. alert(this.age);
  10. }
  11. varworker7=newWorker(23,3000,"Dev");
  12. varworker8=newWorker(43,1000,"Dev");
  13. worker7.tellSalary();
  14. alert(worker7.homeaddress)//wwdd
  15. worker8.homeaddress.push("gg")
  16. alert(worker7.homeaddress)//wwwdd
  17. alert(worker8.homeaddress)//wwwddgg


第四种的方式看上去也很散落,可以改进一下
Javascript代码
  1. varperson=function(sname,sage){
  2. this.name=sname;
  3. this.age=sage;
  4. };
  5. person.prototype={
  6. tellName:function(){
  7. alert(this.name);
  8. },
  9. tellAge:function(){
  10. alert(this.age);
  11. }
  12. };

优点:
1. 可以传参数构造一个新对象
2. 当有多个对象产生时,不会创建多个函数实体,没有内存浪费
3. 封装想很好,属性和方法分开,
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值