1.工厂方法

demo.js
1
2
3
4
5
6
7
8
9
10
11
function createPerson(name, age) {
var person = new Object();
person.name = name;
person.age = age; person.sayHi = function() {
return "name: " + this.name + " age: " + this.age;
}; return person;
}

优点:创建相同实例只有一处代码。

缺点:不知道对象原型。

test.js
1
2
3
4
5
6
7
8
var person1 = createPerson("zhang", 20);
var person2 = createPerson("li", 30); console.log(person1.sayHi());
console.log(person2.sayHi()); console.log(person1 instanceof Person); //false
console.log(person2 instanceof Person); //false

2.构造函数

demo.js
1
2
3
4
5
6
7
8
function Person(name, age) {
this.name = name;
this.age = age; this.sayHi = function() {
return "name: " + this.name + " age:" + this.age;
};
}

优点:可以知道实例原型。

缺点:方法不是同一个方法实例。

test.js
1
2
3
4
5
6
7
8
9
10
var person1 = new Person("zhang", 20);
var person2 = new Person("li", 30); console.log(person1.sayHi()); //name: zhang age:20
console.log(person2.sayHi()); //name: li age:30 console.log(person1 instanceof Person); //true
console.log(person2 instanceof Person); //true console.log(person1.sayHi == person2.sayHi); //false

3.原型方法

demo.js
1
2
3
4
5
6
7
function Person() {}

Person.prototype.name = "zhang";
Person.prototype.age = 20;
Person.prototype.sayHi = function() {
return "name: " + this.name + " age: " + this.age;
};

优点:共享方法实例对象。

缺点:每个实例需要定义非方法属性。

test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
var person1 = new Person();
var person2 = new Person(); person2.name = "li";
person2.age = 30; console.log(person1.sayHi()); //name: zhang age:20
console.log(person2.sayHi()); //name: li age:30 console.log(person1 instanceof Person); //true
console.log(person2 instanceof Person); //true console.log(person1.sayHi == person2.sayHi); //true

4.构造函数和原型的组合方法

demo.js
1
2
3
4
5
6
7
8
function Person(name, age) {
this.name = name;
this.age = age;
} Person.prototype.sayHi = function() {
return "name: " + this.name + " age: " + this.age;
};

优点:非方法属性在构造函数中定义,方法属性则在原型中定义。

总结:最后一种方法是比较好的创建对象的方式,综合了前面3种方式的优点。每个实例对象都有自己实例属性的一份副本,但同时共享着方法的引用,最大限度节省了内存。

Javascript几种创建对象的方法的更多相关文章

  1. JavaScript 三种创建对象的方法

    JavaScript中对象的创建有以下几种方式: (1)使用内置对象 (2)使用JSON符号 (3)自定义对象构造 一.使用内置对象 JavaScript可用的内置对象可分为两种: 1,JavaScr ...

  2. java四种创建对象的方法

    1.用new语句创建对象,这是最常见的创建对象的方法.   2.运用反射手段,调用java.lang.Class或者java.lang.reflect.Constructor类的newInstance ...

  3. C++中三种创建对象的方法【转】

    我们都知道C++中有三种创建对象的方法,如下: #include <iostream> using namespace std; class A { private: int n; pub ...

  4. 转 java中5种创建对象的方法

    作为Java开发者,我们每天创建很多对象,但我们通常使用依赖管理系统,比如spring去创建对象.然而这里有很多创建对象的方法,我们会在这篇文章中学到. Java中有5种创建对象的方式,下面给出它们的 ...

  5. javascript三种创建对象的方式

    javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成 ...

  6. js几种创建对象的方式

    javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象.那么,既然是面象对象的,如何来创建对象呢? 一.通过”字面量“方式创建. 方法:将成 ...

  7. JavaScript 中创建对象的方法(读书笔记思维导图)

    面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.而 ECMAScript 中没有类的概念,所以我们可以使用 ...

  8. JavaScript高级特性-创建对象的九种方式

    1. 对象字面量 通过这种方式创建对象极为简单,将属性名用引号括起来,再将属性名和属性值之间以冒号分隔,各属性名值对之后用逗号隔开,最后一个属性不用逗号隔开,所有的属性名值对用大括号括起来,像这样: ...

  9. javascript创建对象的方法--原型模式

    javascript创建对象的方法--原型模式 一.总结 1.原型模式解决内存浪费的方法(继承):通过继承,对象继承原型模式下的所有属性,对象不同于其它对象的的属性自己创建或者修改 2.原型的使用(p ...

随机推荐

  1. 省市县三级联动的SQL

    完整版见https://jadyer.github.io/ 首先是建表语句 CREATE TABLE `t_address_province` ( `id` INT AUTO_INCREMENT PR ...

  2. PhotoSwipe中文API(四)

    在幻灯片自定义HTML内容 为了使PhotoSwipe显示HTML内容的幻灯片,你需要在幻灯片对象定义html属性.它应该包含HTML字符串或DOM元素对象. var items = [ // sli ...

  3. mac终端显示日历信息命令

    cal 命令: 用法: usage: cal [-jy] [[month] year] cal [-j] [-m month] [year] ncal [-Jjpwy] [-s country_cod ...

  4. Hadoop MapReduce Task的进程模型与Spark Task的线程模型

    Hadoop的MapReduce的Map Task和Reduce Task都是进程级别的:而Spark Task则是基于线程模型的. 多进程模型和多线程模型 所谓的多进程模型和多线程模型,指的是同一个 ...

  5. POJ1523:SPF(无向连通图求割点)

    题目:http://poj.org/problem?id=1523 题目解析: 注意题目输入输入,防止PE,题目就是求割点,并问割点将这个连通图分成了几个子图,算是模版题吧. #include < ...

  6. mariadb10.1.13GTID实现主从复制

    ---恢复内容开始--- 环境:centos6.5       mariadb:10.1.13-MariaDB GTID:GTID是有服务器的UUID和事务序号组成的唯一事务序号 ---UUID:N ...

  7. mutex锁住共用线程函数 造成了死锁 ,为什么?

    锁住共用的线程函数,为什么出现了死锁的现象,是真的死锁了吗?为什么勒[清晰早点] [逍遥游]# 一般都是用 EnterCriticalSection 和 LeaveCriticalSection 锁住 ...

  8. 38初识xml

    XML(可扩展标记语言)是一种用于记录多种数据类型的标记语言.使用XML可以将各类型的文档定义为容易读取的格式,便于用户读取.而且,在应用程序中使用XML,可以轻松实现数据交换. QT中提供两种访问X ...

  9. MySQL从删库到跑路(二)——MySQL字符集与乱码解析

    作者:天山老妖S 链接:http://blog.51cto.com/9291927 一.字符集与编码 1.字符集简介 字符(Character)是各种文字和符号的总称,包括各国家文字.标点符号.图形符 ...

  10. appium问题解决

    ppium 1.4.16 版本 测试安卓7.0 提示AppiumSettings.Unlock.AndroidInputManager 安装 修改 C:\Program Files (x86)\App ...