js之创建对象(摘自高程)
工厂模式
function factorial(name,age){ var o=new Object(); o.name=name; o.age=age; o.sayName= function () { alert(this.name); }; return o; } var result=factorial("lily",25); result.sayName();
缺点:没有解决对象识别问题,即无法知道对象的类型
function Person(name,age){ this.name=name; this.age=age; this.sayName=function(){ alert(this.name); alert(this.age); } } var obj=new Person("lily",30);
优点:没有显式的创建对象;
直接将属性和方法赋给了this对象;
没有return语句;
缺点:每个方法都要在每个实例上重新创建一遍
原型模式
function Person(){ } Person.prototype.name="lily"; Person.prototype.age="25"; Person.prototype.sayName=function(){ alert(this.name); alert(this.age); }; Person.prototype.friend=["lucy","fang"]; var newObj=new Person(); newObj.friend.push("newFriend"); var newObj02=new Person(); alert(newObj02.friend);
function MixedFunction(name,age){ this.name=name; this.age=age; } MixedFunction.prototype.sayName=function(){ alert(this.name); alert(this.age); }; var mixObj=new MixedFunction("lily",25); mixObj.sayName();
动态原型模式
就是通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型
function DynamicFunction(name,age){ this.name=name; this.age=age; if(typeof this.sayName!="function"){ DynamicFunction.prototype.sayName=function(){ alert(this.name); alert(this.age); } } } var obj=new DynamicFunction("liy",25); obj.sayName();
寄生构造模式(除了使用new操作符并把使用的包装函数之外,这个模式跟工作模式其实一样)
该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象
function Person(name,age){ var o=new Object(); o.name=name; o.age=age; o.sayName=function(){ alert(o.name); }; return o; } var friend=new Person("lily",25); friend.sayName();
稳妥构造函数
这种方式适合用在不允许引用this的对象,稳妥对象最适合在一些安全的环境中(这些环境中会禁止使用this和new),或者在防止数据被其他应用程序(如Mashup)改动时使用
function Person(name,age){ var o=new Object(); o.sayName=function(){ alert(name); }; return o; } var friend=new Person("lily",25); friend.sayName();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。