创建js函数的几种方法及各自优缺点

作者:admin / 时间:3年前 (2017/07/02) / 分类:前端开发 / 阅读:693 / 评论:0

比较js中创建对象的几种方式

1.直接创建

var man={

name:'key',

age:18,

sex:'男',

say:function(){

alert('hello world');

}

}

优点:简单快速。

缺点:限制了对象的重用。

2.工厂模式

function createObj(name, sex){

var obj = new Object();

obj.name = name;

obj.sex = sex;

obj.sayName = function(){

alert(this.name);

}

return obj;

}

var person = createObj('Tom', 'man');

优点:使用这种方法能够不断重复的创建对象。

缺点:无法识别对象类型,每个对象都有自己的say 函数,不能共享同一个函数,造成内存的浪费。

3.构造函数

function createObj(name, sex){

this.name = name;

this.sex = sex;

this.sayName = function(){

alert(this.name);

}

}

var person = new createObj('Tom', 'man');

使用这种方法能够重复的创建对象,并且能够识别对象的类型。

缺点:①多个实例重复创建方法,无法共享。

4.原型方法

function createObj(){}

createObj.prototype.name = 'Tom';

createObj.prototype.sex = 'man';

createObj.prototype.sayName = function(){

alert(this.name);

}

var person = new createObj();

优点:能够共享一个函数。

缺点:①无法传入参数,不能初始化属性值。

   ②如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。

5.组合式(构造函数+原型方法)推荐使用

function createObj(name, sex){

this.name = name;

this.sex = sex;

}

createObj.prototype.sayName = function(){

alert(this.name);

}

var person = new createObj('Tom', 'man');

优点:构造函数共享实例属性,原型共享方法和想要共享的属性。可传递参数,初始化属性值。

6.动态原型方法

function createObj(name, sex){

this.name = name;

this.sex = sex;

if(typeof this.sayName != 'function'){

createObj.prototype.sayName = function(){

alert(this.name);

}

}

}

var person = new createObj('Tom', 'man');

说明:if语句中只会调用一次,就是在碰到第一个实例调用方法时会执。此后所有实例都会共享该方法。在动态原型方法下,不能使用对象字面量重写原型。


没有评论,留下你的印记,证明你来过。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。