码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 创建对象的方式

时间:2016-05-03 20:31:36      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

本文主要参考了阮一峰的《Javascript 面向对象编程(一):封装

1、原始方法(也是最简单的方法)

1 var p1 = {};
2 var person = new Object();

上面两行代码的效果是一样的。

1 var p1 = {};
2 p1.name = ‘张三‘;
3 p1.age = 23;
4 
5 var p2 = {};
6 p2.name = ‘翠花‘;
7 p2.age = 18;

2、原始方法升级版

1 function Person(name, age) {
2     return {
3         name: name,
4         age: age
5     }  
6 }
7 var p1 = Person(‘张三‘, 23);
8 var p2 = Person(‘翠花‘, 18);

这种方法创建的对象没有任何联系,它的本质和方法1没什么区别。

3、构造函数模式(使用this)

1 function Person(name, age) {
2     this.name = name;
3     this.age = age;
4 }
5 var p1 = new Person(‘张三‘, 23);
6 var p2 = new Person(‘翠花‘, 18);

上面的代码实例的constructor属性指向他们的构造函数。

1 p1.constructor == Person //true
2 p2.constructor == Person //true
3 
4 p1 instanceof Person //true
5 p2 instanceof Person //true

并且用instanceof验证确实是Person的实例。

构造方法的问题

1 function Person(name, age) {
2     this.name = name;
3     this.age = age;
4     this.takeBus = function() {
5         alert(‘Take a bus.‘);
6     }
7 }
8 var p1 = new Person(‘张三‘, 23);
9 var p2 = new Person(‘翠花‘, 18);

对上面的方法增加了一个【takeBus】方法之后,表面上看没什么问题,但是:

1 p1.takeBus == p2.takeBus //false

说明p1和p2分别有了一个【takeBus】这个方法,即【takeBus】这个方法并没有公用。造成资源浪费。那么,如何公用呢?

4、Prototype模式

 1 function Person(name, age) {
 2     this.name = name;
 3     this.age = age;
 4 }
 5 
 6 Person.prototype.takeBus = function() {
 7     alert(‘Take a bus.‘);
 8 }
 9         
10 var p1 = new Person(‘张三‘, 23);
11 var p2 = new Person(‘翠花‘, 18);
12 
13 p1.takeBus == p2.takeBus // true

可以看到使用prototype这种方法使得【Person】实例化得到的对象【takeBus】方法是同一个方法。

JavaScript 创建对象的方式

标签:

原文地址:http://www.cnblogs.com/ylhb/p/5452972.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!