zoukankan      html  css  js  c++  java
  • js创建对象的6种方式

    一、工厂模式

    function createStudent(name,age){
        var o=new Object();
        o.name=name;
        o.age=age;
        o.myName=function(){
            alert(this.name);
        };
        return o;
    }
    var student1_ = createStudent('aaa',15);
    var student2_ = createStudent('bbb',18);
    
    //问题: 工厂模式没有解决对象识别的问题,不能确定一个对象的类型

    二、构造函数模式

    function Student(name,age){
        this.name=name;
        this.age=age;
        this.myName=function(){
            alert(this.name);
        };
    }
    var student1_ = new Student('aaa',15);
    var student2_ = new Student('bbb',18);
    
    //new 关键字的作用
    //1.创建一个对象
    //2.将构造函数的作用域赋给新对象,this指向了新对象
    //3.执行构造函数中的代码,为新对象添加熟悉
    //4.返回新对象
    //问题: 每个方法都要在每个实例上重新创建一遍

    三、构造函数模式+原型模式

    function Student(name,age){
        this.name=name;
        this.age=age;
    }
    Student.prototype.myName = function(){
        alert(this.name);                    
    };    
    
    var student1_ = new Student('aaa',15);
    var student2_ = new Student('bbb',18);
    student1__.myName();

    四、动态原型模式

    function Student(name,age){
        this.name=name;
        this.age=age;
        if(typeof this.myName!="function"){//第一次进入
            Student.prototype.myName = function(){
                alert(this.name);                    
            };                    
        }
    }
    var student1_ = new Student('aaa',15);
    student1_.myName();

    五、寄生构造函数模式

    function Student(name,age){
        var o = new Object();
        o.name=name;
        o.age=age;
        o.myName=function(){
            alert(this.name);
        };                    
        return o;
    }
    var student1_ = new Student('aaa',15);
    student1_.myName();
    //这种模式的基本思想是创建一个函数,该函数的作用仅仅是封装创建对象的代码,然后再返回新创建的对象。

    六、稳妥构造函数模式

    function Student(name,age){
        var o = new Object();
        var name=name;
        var age=age;
        o.myName=function(){
            alert(name);
        };
        return o; 
    }
    var student1_ = new Student('aaa',15);
    student1_.myName();
    //没有公共属性,而且其他方法也不用引用this的对象
  • 相关阅读:
    腾讯测试开发岗一面二面上机编程题
    软件测试工程师职业发展漫谈
    学习 Python,这 22 个包怎能不掌握?
    Loj514「LibreOJ β Round #2」模拟只会猜题意
    后缀数组模板(倍增)
    USACO06DEC 牛奶模式
    BZOJ3680 JSOI2004 平衡点
    loj6278 数列分块入门题2
    loj6277 数列分块入门题1
    Codeforces 383C Propagating tree, 线段树, 黑白染色思想
  • 原文地址:https://www.cnblogs.com/naokr/p/5209266.html
Copyright © 2011-2022 走看看