javascript创建对象

1. 工厂模式

工厂模式抽象了创建具体对象的过程,使用函数来封装以特定的接口创建对象的细节。

function createPerson(name,age,job){

        var o = new object();

        o.name = name;

        o.age = age;

        o.job = job;

        o.sayName = function(){

            alert(this.name);

        };

        return o;

}

var personOne = createPerson("ali",21,"bussiness");

var personTwo = createPerson("baidu",22,"software engineer");

2. 构造函数模式

ECMAScript中的构造函数可以用来创建特定类型的对象,像object和array这样的原生构造函数,在运行时会自动出现在执行环境中。此外,可以自定义构造函数,从而自定义对象类型的属性和方法。

function Person(name,age,job){

        this.name = name;

        this.age = age;

        this.job = job;

        this.sayName = function(){

            alert(this.name);

        };

}

var personOne = new Person("ali",21,"bussiness");

var personTwo = new Person("baidu",22,"software engineer");

创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型,这是构造函数模式优于工厂模式的地方。

2.1 将构造函数当作函数

任何函数只要以new操作符来调用就可以当作构造函数,不通过new操作符调用那就和普通函数没什么区别。

//当作构造函数调用

var person = new Person("ali",21,"bussiness");

person.sayName();  //“ali”

//作为普通函数调用

 Person("tengxun",21,"bussiness"); //添加到window

window.sayName();  //“tengxun”

//在另一个对象的作用域中调用

var o = new Object();

Person.call(o,"baidu",25,"anger");

o.sayName(); //"baidu"

2.2 构造函数问题

function Person(name,age,job){

        this.name = name;

        this.age = age;

        this.job = job;

        this.sayName = sayName;

}

function sayName(){

        alert(this.name);

}

var personOne = new Person("ali",21,"bussiness");

var personTwo = new Person("baidu",22,"software engineer");

personOne和personTwo对象就共享了在全局作用域定义的同一个sayName()函数。

2.3 原型模式


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。