js实例化对象的各种问题与解决方法

js实例化对象的各种问题与解决方法

ID:21809703

大小:59.50 KB

页数:5页

时间:2018-10-24

js实例化对象的各种问题与解决方法_第1页
js实例化对象的各种问题与解决方法_第2页
js实例化对象的各种问题与解决方法_第3页
js实例化对象的各种问题与解决方法_第4页
js实例化对象的各种问题与解决方法_第5页
资源描述:

《js实例化对象的各种问题与解决方法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、本文档包含目录:一、创建对象的方法(2种直接创建+构造函数创建对象)二、解决构造的"方法复制"导致的资源浪费问题。产生新问题:全局方法只能用于该类(人可用,鸟不可用);多个全局方法,鸟使用则不完美三、jS提供原型模式解决全局方法只能被一个类使用的问题四、原型模式带来的问题:所有对象实例获取相同属性值,对象实例对引用型属性的修改会导致父类原型也发生改变五、解决原型模式的问题:原型模式与构造函数模式的结合一、创建对象的方法(2种直接创建+构造函数创建对象)/*面向对象语言中离不开类的概念,通过类可以创建任意多个具有相同属性和方法的对象。但是

2、」S中没有类的概念,US对象的概念和PHP对象有很大不同)对象中有属性和方法两个概念:人有名字属性,有说话走路的功能,就是方法。//创建对象/实例化一^对象的基本方法有两种"方法1:varpersonl=newObject。;personl.name="张三";personl.age=20;personl.say=function(){document.writeln("我是说话的方法");}document.writeln(personl.name);"方法2:varperson2={name:"李四",age:18,say:func

3、tion(){document.writeln("我是person2的方法");}}document.write(person2.name);广方法3:构造函数模式创建对象构造函数创建对象实例必须new。四个步骤:1)创建一个新对象2)将构造函数的作用域赋给新对象(this代表当前调用对象,this指向新对象)3)执行构造函数中的代码4)返回新对象7functionperson3(name,age,hobby){this.pname=name;this.page=age;this.phobby=hobby;this.say=functi

4、on(){document.writeln("我是person3的方法");}}varperson31=newperson3("张三游戏”);for(pinperson31){document.writeln("person31["+p+"]="+person31[p]);}document.writeln(person31);document.writeln(person31.constructor);/*输出:functionPerson4(name,age,hobby){this.name=name;this.age=age;th

5、is.hobby=hobby;this.Say=function(){echo("我就是方法了!"+this.name);}}实例的constructir属性是生成他的那个构造函数。构造函数设计的目的是用来标识对象的类型:人类还是鸟类*//*构造函数与普通函数的区别:就是调用方式不同,所有普通函数只要通过new操作符来调用,他就可以称为构造函数,否则就是普通函数。*/varperson33=newperson3(M王五运动");person3("王五",18,"运动”);window.SayO;//我就是方法了!赵六/*说明:当以普通函

6、数调用时候this就代表是当前对象,默认是window对象当以构造函数调用是返回给新生成的对象。上面的person33和person31都是又person3函数构造出来的,属性是不同,但是方法是相同的。也就是说Say()方法,分别在person31和person33保存了两份副本,而且两份副本一样只是属于不同的示例。这样做就类似我们声明了两个功能一样的函数(仅仅作用域不同,这样浪费资源。)7二、解决构造的"方法复制"导致的资源浪费问题。产生新问题:全局方法只能用于该类(人可用,鸟不可用);多个全局方法,鸟使用则不完美/*在上文中,构造函

7、数中如果加入方法,则会复制两份方法,造成浪费。为解决该问题,将构造函数代码修改如下:*/functionperson(name,age){this.pname=name;this.page=age;this.psay=say;//把方法移到对象外,这里保留指向方法的指针,这里不能加括号,否则会直接执行。}functionsay(){document.writeln(this.pname+M说:我是公共方法");}varpl=newperson("张三",22);varp2=newperson("李四",18);pl.psayO;p2.p

8、say();document.writeln(pl.psay==p2.psay);//输出为true,表明两个使用同个方法,并不是复制出两份,共享和节省资源,提高性能/*问题1:这个方法只适合给person

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。