JavaScript-寄生构造函数模式&&稳妥构造函数模式

寄生构造函数模式

这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象,跟工厂模式很像,但是这里是使用 new 操作符并把使用的包装函数叫做构造函数

    function Person(name, age, job) {
        var o=new Object();
        o.name = name;
        o.age = age;
        o.job = job;
        o.getName=function(){
            console.log(this.name);
        }
        return o;
    }
    var per=new Person("zw",21,"student");
    per.getName();//zw

这个模式可以在特殊的情况下用来为对象创建构造函数。假设我们想创建一个具有额外方法的特殊数组,由于不能直接修改 Array 构造函数,因此可以使用这个模式。

   function SpecialArray(){
        //创建数组
        var values=new Array();
        //添加值
        values.push.apply(values,arguments);
        //添加方法
        values.toPipedString=function(){
            return this.join("|");
        };
        return values;
    }
    var colors=new SpecialArray("blue","red","black");
    console.log(colors.toPipedString());//blue|red|black

构造函数返回的对象与在构造函数外部创建的对象没有什么不同。为此,不能依赖 instanceof 操作符来确定对象类型。

 console.log(colors instanceof SpecialArray);//false

稳妥构造函数模式

稳妥对象: 没有公共属性,而且其方法也不引用 this 的对象。

稳妥对象最适合在一些安全的环境中(这些环境中会禁止使用 this 和 new ),或者在防止数据被其他应用程序(如 Mashup
程序)改动时使用。

稳妥构造函数遵循与寄生构造函数类似的模式,但有两点不同:

         1.新创建对象的实例方法不引用 this

          2.不使用 new 操作符调用构造函数

   function Person(name,age,job) { 
        var o=new Object();
        o.name=name;
        o.age=age;
        o.job=job;
        o.getName=function(){
            console.log(name);
        };
        return o;
    }
    var per=Person("zw",20,"student");
    per.getName();//zw

在以这种模式创建的对象中,除了使用 getName() 方法之外,没有其他办法访问 name 的值。

与寄生构造函数模式类似,使用稳妥构造函数模式创建的对象与构造函数之间也没有什么关系,因此 instanceof 操作符对这种对象也没有意义。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值