JavaScript面向对象代码的变迁过程
来源:互联网 发布:微软系列软件 编辑:程序博客网 时间:2024/05/09 23:04
注:本文主要内容整理自《JavaScript高级程序设计》。
Object构造函数或者对象字面量:
//对象构造函数var person = new Object();person.name = "Nick";person.age = 29;person.job = "doctor";person.sayName = function(){alert(this.name);}//对象字面量var person={name: "Nick",age: 29,job: "doctor",sayName: function(){alert(this.name);}}
缺点:一个接口创建很多对象,产生大量重复代码。
↓
工厂模式:
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 person1 = createPerson("Nick", 29, "doctor");var person2 = createPerson("Summer", 24, "student");
缺点:无法知道一个对象的类型。
↓
构造函数:
function Person(name, age, job){this.name = name;this.age = age;this.job = job;this.sayName = function(){alert(this.name);};}var person1 = new Person("Nick", 29, "doctor");var person2 = new Person("Summer", 24, "student");
缺点:每个实例都会重新创建方法(如例子中的sayName())。
既然这样,就有人会想,将构造函数的方法移到函数外部,不就可以了?然而,方法移到外部后就成了全局函数,但此函数也只局限于此构造函数的相关实例对象使用,并非真正意义上的“全局函数”。而且,当实例对象需要定义函数很多时,就要定义多个全局函数,毫无封装性可言。
↓
原型模式:
function Person(){}Person.prototype.name = "Nick";Person.prototype.age = 29;Person.prototype.job = "doctor";Person.prototype.sayName = function(){alert(this.name);};var person1 = new Person();
缺点:所有实例获得相同的属性值
↓
构造函数与原型模式混用:
function Person(name, age, job){this.name = name;this.age = age;this.job = job;this.friends = {"Jack", "Rose"};}Person.prototype = {constructor : Person,sayName : function(){alert(this.name);}}var person1 = new Person("Nick", 29, "doctor");var person2 = new Person("Summer", 24, "student");person1.friends.push("Van");alert(person1.friends === person2.friends); //falsealert(person1.sayName === person2.sayName); //true这种模式是目前使用自广泛、认同度最高的一中创建自定义类型的方法。
0 0
- JavaScript面向对象代码的变迁过程
- 面向对象开发过程中对象的变迁污染与细化变质
- 005:面向过程的代码 vs 面向对象的代码
- 006:面向过程的代码 vs 面向对象的代码
- javascript 面向对象的经典代码
- JavaScript 面向对象编程,严格过程的标准化编程法,目前为止最好的 JS 生成对象代码结构
- JavaScript面向对象代码实践
- JavaScript面向对象代码示例
- 面向对象的过程
- 面向对象的过程
- 面向对象的javascript
- javascript的面向对象
- JavaScript的面向对象
- 面向对象的JavaScript
- Javascript的面向对象
- 面向对象的JavaScript
- 面向对象的JavaScript
- 面向对象的JavaScript
- poj3347 Kadj Squares (计算几何)
- Jenkins+maven+tomcat8自动构建部署配置
- next_permutation函数
- C语言fopen函数了解
- 数论四大定理
- JavaScript面向对象代码的变迁过程
- 已知直线上两点求其一般式
- poj1039 Pipe(计算几何叉积求交点)
- 云灌溉系统介绍
- 倒置函数reverse的用法
- 面试题四 替换字符中的空格
- UVA 10652 Board Wrapping(二维凸包)
- 关于math头文件
- poj 2187 Beauty Contest(二维凸包旋转卡壳)