这里有新鲜出炉的 Javascript 教程,程序狗速度看过来!
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
这篇文章主要对比了 js 创建对象几种方式的优缺点,感兴趣的小伙伴们可以参考一下
比较 js 中创建对象的几种方式
1. 工厂模式
- 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');
缺点:①无法确定对象的类型(因为都是 Object)。
②创建的多个对象之间没有关联。
2. 构造函数
- function createObj(name, sex){
- this.name = name;
- this.sex = sex;
- this.sayName = function(){
- alert(this.name);
- }
- }
- var person = new createObj('Tom', 'man');
缺点:①多个实例重复创建方法,无法共享。
②多个实例都有 sayName 方法,但均不是同一个 Function 的实例。
3. 原型方法
- function createObj(){}
- createObj.prototype.name = 'Tom';
- createObj.prototype.sex = 'man';
- createObj.prototype.sayName = function(){
- alert(this.name);
- }
- var person = new createObj();
缺点:①无法传入参数,不能初始化属性值。
②如果包含引用类型的值时,改变其中一个实例的值,则会在所有实例中体现。
4. 组合式(构造函数 + 原型方法)推荐使用
- function createObj(name, sex){
- this.name = name;
- this.sex = sex;
- }
- createObj.prototype.sayName = function(){
- alert(this.name);
- }
- var person = new createObj('Tom', 'man');
优点:构造函数共享实例属性,原型共享方法和想要共享的属性。可传递参数,初始化属性值。
5. 动态原型方法
- 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 语句中只会调用一次,就是在碰到第一个实例调用方法时会执。此后所有实例都会共享该方法。在动态原型方法下,不能使用对象字面量重写原型。
来源: http://www.phperz.com/article/17/0516/331508.html