简单分析javascript面向对象与原型
本文主要内容参考来自JavaScript高级程序设计,面向对象与原型章节:
1、工厂模式
ECMAScript可以通过工厂模式来创建对象:
//工厂模式 functioncreateObject(name,age){ varobj=newObject();//创建对象 obj.name=name;//添加属性 obj.age=age; obj.run=function(){//添加方法 returnthis.name+this.age+'运行中...'; }; returnobj;//返回对象引用 }; varobj1=createObject('Lee',100);//创建第一个对象 varobj2=createObject('Jack',200);//创建第二个对象 //alert(obj1.run());//打印第一个对象实例的run()方法 //alert(obj2.run());//打印第二个对象实例的run()方法 //alert(typeofobj1); //alert(typeofobj2); alert(obj1instanceofObject);//true alert(obj2instanceofObject);//true
通过工厂模式创建的对象,解决了重复实例化问题,但对象识别问题无法解决(所有对象均是Object),因此要想解决对象识别问题,我们采用下面的构造函数。
2、构造函数
//构造函数创建 functionPerson(name,age){//所有构造函数对象都是Object this.name=name; this.age=age; this.run=function(){ returnthis.name+this.age+"ing..."; }; }; varperson1=newPerson('zhu1',100); varperson2=newPerson('zhu2',200); alert(person1.run()); alert(person2.run()); alert(person1instanceofObject);//ture alert(typeofperson2);//Person alert(person2instanceofPerson);//true varperson3=newObject(); Person.call(person3,'zhu3',300);//对象冒充,person3是Object类型,冒充Person类型 alert(person3.run());
构造函数中this:代表当前作用域对象的引用,如果在全局范围this代表window对象,如果在构造函数体内,就代表当前构造函数所声明的对象。
构造函数方法,及解决了重复实例化问题,有解决了对象识别问题,对比跟工厂方法不同之处可知:
1.构造函数方法没有显示的创建对象(newObject());
2.直接将属性和方法值赋值给this;
3.没有return语句;
4.但是使用构造函数创建必须使用new运算符;
以上所述就是本文的全部内容了,希望大家能够喜欢。