javascript 创建对象的几种方式
1.工厂模式
function createPerson(name, age, gender) { var p = {}; p.name = name; p.age = age; p.gender = gender;
p.sayHello = function(){
alert('hello');
} return p; } var p1 = createPerson('jim', 19, '男'); var p2 = createPerson('lily', 12, '女');
这种类型的函数就是用来创建对象的,即生产对象 成为工厂函数.
2.构造函数模式
用来创建对象的一种函数,使用new关键字调用的函数
function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; } var p = new Person('jim', 18, '男' );
注: 构造器中不需要 return 语句
调用构造器的时候, 使用 new 运算符引导
在构造器中 this 表示当前对象. 给对象提供成员使用 this.xxx 的 方式
构造器的名字, 一般使用 Pascal 命名规则( 首字母大写的 )
3.原型模式
1.直接给原型对象添加成员
function Cat(){ } Cat.prototype.run=function(){ console.log("在跑步"); } var cc=new Cat(); cc.run();
2.直接替换原型对象( 注意: 手动的添加 constructor 属性, 表示对应的构造函数 )
function Cat(){ } Cat.prototype={ sayHello:function(){ console.log("打招呼"); } } var cc=new Cat(); cc.sayHello();
两种方式的不同?
1>直接在原型中添加成员的方式是使用的默认的原型对象,而默认的原型对象中有一个constructor的属性,该属性指向构造函数.
2>直接替换原型对象的方式是替换一个全新的对象,对象中有有什么属性,原型中就有什么成员,如果没有写constructor属性,原型对象中就没有这个constructor属性,但是可以手动添加constructor属性
4.混合构造函数原型模式
5.动态原型方式