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函数的区别

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

  • 相关阅读:
    linux下wc命令详解
    用shell脚本监控进程是否存在 不存在则启动的实例附带if判断详细条件
    shell脚本输出给字体带颜色
    在centos6.5下安装配置docker
    php lock_sh共享锁 与 lock_ex排他锁
    hadoop streaming 多路输出 [转载]
    gzip压缩及测试方法【转载】
    天空没有翅膀的痕迹,而我已飞过
    logrotate机制与原理[转载]
    服务器 数据库 问题定位的几个工具
  • 原文地址:https://www.cnblogs.com/Corphish/p/7144182.html
Copyright © 2011-2022 走看看