js创建对象

来源:互联网 发布:贵阳大数据交易所 地址 编辑:程序博客网 时间:2024/06/04 21:54

1、 工厂模式
function createPerson(name,age,job){
var o = new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=sayName;
return o;
}

function sayName(){    alert(this.name);}

2 构造模式
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=sayName;
}
根据OO原则,函数首字母大写。
要创建Person必须使用new,该种方式能够将实例标识成一个特定的类型,例如
var person1 = new Person();
alert(person1 instranceof Person); true,
任何用new操作符来调用的函数,均可作为构造函数。
3 原型模式
我们创建的每个函数都有一个protptype属性,该属性是一个指针,指向一个对象
function Person(){} //构造函数什么都没,如果有为实例属性或者实例方法

    Person.prototype.name='wang';   //原型属性    Person.prototype.age = 30;    Person.prototype.sayName = function(){  //原型方法        return this.name+' '+this.age;    };    var p1 = new Person();    var p2 = new Person();    alert(p1.sayName==p2.sayName);原型模式执行流程:1、先查找构造函数的实例属性或者方法,如果有立即返回2、如果构造函数里面没有,在原型对象里面查找。

delete p1.name删除属性

hasOwnProperty()判断在实例中是否存在指定属性
‘name’ in p1 //不管实例或者原型中只要存在,返回true
原型模式,所有初始化值是一致的,这也是原型模式的最大优点,共享。
4、原型与共享模式
不共享的部分使用构造方式,共享部分使用原型模式
function Person(name,age){
this.name=name,
this.age=age;
} //构造函数什么都没,如果有为实例属性或者实例方法

    Person.prototype = {        constructor: Person,        sayName:function(){            return this.name+this.age;        }    }    alert(new Person('wangg',29).sayName());此种方式解决了传参和共享的问题

5、动态原型模式
function Person(name,age){
this.name=name,
this.age=age;
this.family=[‘秋鸣’,’旺琴’];

    //原型的初始化只要第一次执行就ok,不需要每次    if (typeof this.sayName!='function') {        Person.prototype.sayName = function(){            alert(this.family);            return this.name+this.age;        }    }}   //构造函数什么都没,如果有为实例属性或者实例方法alert(new Person('test1',29).sayName());alert(new Person('test2',29).sayName());
原创粉丝点击