zoukankan      html  css  js  c++  java
  • js创建对象的几种方式 标签: javascript 2016-08-21 15:23 123人阅读 评论(0)

    1、传统方法,创建一个对象,然后给这个对象创建属性和方法。

    var person = new Object();
    person.name = "张三";
    person.age = 26;
    person.getName=function(){
        return this.name; //this代表当前作用域下的对象
    };

    这种方法有一个缺点,再创建类似对象的时候就会产生大量的代码。

    2、字面量方法

    var person = {
        name:"张三",
        age:26,
        getName:function(){
            return this.name;
        }
    }

    3、工厂模式方法

    function createPerson1(name,age){
        var obj = new Object();
        obj.name=name;
        obj.age=age;
        obj.getName=function(){
            return this.Name;
        };
        return obj;
    }
    
    var person1 = creatPerson1("张三"26);
    var person2 = creatPerson1("李四"27);
    
    var person3 = new creatPerson1("王五",28);//区分一下new一个函数和直接调用一个函数的区别
    

    注意,工厂模式解决了集中实例化的问题,但是还存在一个问题就是它无法搞清楚是哪个对象的实例。
    假设还有一个工厂createPerson2(),那么用这两个工厂产生的实例无法确定是createPerson()1的实例还是createPerson2()工厂的实例。

    function createPerson2(name,age){
        var obj = new Object();
        obj.name=name;
        obj.age=age;
        obj.getName=function(){
            return this.Name;
        };
        return obj;
    }
    var pson1 = createPerson1("li",23);
    var pson2 = createPerson2("zhagn",24);
    alert(pson1 instanceof Object);//true
    alert(pson1 instanceof createPerson1);//false

    因为它们都是Object对象就无法区分谁到底是谁的对象。
    4、构造函数方法

    //构造函数
    function Person(name,age){
        this.name=name;
        this.age=age;
        this.getName=function(){
            return this.name;
        };
    }
    var person = new Person("zhang",23);
    
    alert(person instanceof Object);//true
    alert(person instanceof Person);//true
    
    

    构造函数方法即解决了重复实例化问题,又解决了对象识别问题。
    但是注意,构造函数方式并没有像工厂方式一样在内部new一个Object,那么这个对象是怎么产生的呢?

    • 构函数没有new Object,但是后台会自动new一个Object。
    • this就相当于后台自动new出来的这个Object。
    • 构造函数不需要像工厂方法一样返回对象引用,它是后台自动返回的。

    构造函数的规范:
    - 构造函数也是函数,但函数名第一个字母大写
    - 必须new运算符


    关于new函数和直接调用函数的区别可以查看我的博客文章:
    js中直接调用函数和new函数的区别

    您的资助是我最大的动力!
    金额随意,欢迎来赏!

  • 相关阅读:
    波松分酒问题 C++求最优解. Anthony
    Effective STL 条款7 Anthony
    Effective STL 条款16 Anthony
    数据库设计经验之谈[转载]
    C#递归在dropdownlist显示树状
    多域名同主机js转向
    ASP.NET中常用的26个优化性能方法
    域名解析、子域名、cname别名指向、MX记录、泛域名与泛解析、域名绑定、域名转向
    C#数据库递归构造treeview树形结构
    ASP.NET多种方式生成高质量缩略图
  • 原文地址:https://www.cnblogs.com/Corphish/p/7144182.html
Copyright © 2011-2022 走看看