码迷,mamicode.com
首页 > Web开发 > 详细

js之创建对象(摘自高程)

时间:2015-04-17 17:19:56      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

工厂模式

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();
该函数中的name只允许调用sayName()方法外,没有别的方式可以访问其name值



js之创建对象(摘自高程)

标签:

原文地址:http://www.cnblogs.com/zhu1033527427/p/4435226.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!