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

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

原文地址:https://www.cnblogs.com/Corphish/p/7144182.html