zoukankan      html  css  js  c++  java
  • JS 创建对象的7种方法(三)

    4. 组合使用构造函数模式和原型模式(Hybrid)

    构造函数模式用于定义实例属性

    原型模式用于定义方法和共享的属性。

    function People(name, age, job){
        this.name = name;
        this.age = age;
        this.job = job;
        this.friends = ["Court", "Ann"];
    }
    
    People.prototype = {
        constructor: People,
        sayName: function(){
            alert(this.name);
        },
        sayFriends: function(){
            alert(this.friends);
        }
    };
    
    var people1 = new People("Bob", 19, "Tester");
    var people2 = new People("Baby", 22, "Developer");
    people1.friends.push("Alice");
    
    people1.sayFriends();    //Court,Ann,Alice
    people2.sayFriends();    //Court,Ann

    5.动态原型模式(Dynamic)

    通过检查某个应该存在的方法是否有效,来决定是否需要初始化原型。

    function People(name, age, title){
        this.name = name;
        this.age = age;
        this.title = title;
        
        if(typeof sayName != "function"){
            People.prototype.sayName = function(){
                alert(this.name);
            }
        }
    }
    
    var people = new People("Bob", 22, "Developer");
    people.sayName();    //Bob

    6.寄生构造函数(Parasitic)

    这种模式的基本思想是创建一个函数,该函数的作用是封装创建对象的代码,然后再返回新创建的对象。

    function People(name, age, title){
        var o = new Object();
        o.name = name;
        o.age = age;
        o.title = title;
        o.sayName = function(){
            alert(this.name);
        }
        return o;
    }
    
    var people = new People("Bob", 41, "Doctor");

    除了使用new操作符来创建新实例,这个模式和工厂模式是一样的。

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

    function SpecialArray(){
        var value = new Array();
        
        value.push.apply(value, arguments);
        value.toPipledString = function(){
            return this.join("| ");
        }
        
        return value;
    }
    
    var colors = new SpecialArray("red", "blue", "green");
    alert(colors.toPipledString());    //red| blue| green

    使用这种模式创建的对象 不能依赖instanceof操作符来确定其类型。

    7.稳妥构造函数模式(Durable)

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

    1. 新创建对象的实例方法不引用this
    2. 不使用new操作符调用构造函数
    function Person(name, age, title){
        var o = new Object();
        
        o.sayName = function(){
            alert(name);
        }
        return o;
    }
    
    var person = Person("Bob", 30, "Software Engineer");
    person .sayName();    //Bob

    使用这种模式创建的对象 不能依赖instanceof操作符来确定其类型。

  • 相关阅读:
    Python 模块 itertools
    Python 字符串的encode与decode
    python 模块 hashlib(提供多个不同的加密算法)
    暴力尝试安卓gesture.key
    hdu 1300 Pearls(DP)
    hdu 1232 畅通工程(并查集)
    hdu 1856 More is better(并查集)
    hdu 1198 Farm Irrigation(并查集)
    hdu 3635 Dragon Balls(并查集)
    hdu 3038 How Many Answers Are Wrong(并查集)
  • 原文地址:https://www.cnblogs.com/PrajnaParamita/p/5753222.html
Copyright © 2011-2022 走看看