• 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操作符来确定其类型。

  • 相关阅读:
    POJ1204:Word Puzzles——题解
    HDU2222:Keywords Search——题解
    CF17E:Palisection——题解
    BZOJ2565:最长双回文串——题解
    POJ3974:Palindrome——题解
    接口测试的另一种方式 – 接口测试平台
    接口测试的另一种方式 – 接口测试平台
    接口测试的另一种方式 – 接口测试平台
    美团招聘-测试开发工程师
    美团招聘-测试开发工程师
  • 原文地址:https://www.cnblogs.com/PrajnaParamita/p/5753222.html
Copyright © 2020-2023  润新知