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. 内核通信之Netlink源码分析-用户内核通信原理

    2017-07-05 本节从一个小案例入手,结合源码分析下通过netlink进行内核和用户通信的流程. 内核端 按照传统CS模式,其实内核端可以作为是服务器端,用以接收用户的请求并作出处理,但是从ne ...

  2. 第1章 1.8计算机网络概述--OSI参考模型和网络排错

    OSI参考模型的网络排错: 每一层都为上一层提供服务. 如果网络出故障了,应该从底层向高层一层一层的查. OSI参考模型排错指导:(排错原则:自下而上.终极大招ping命令) 1.物理层故障: ①查看 ...

  3. SpringBoot 集成Spring security

    Spring security作为一种安全框架,使用简单,能够很轻松的集成到springboot项目中,下面讲一下如何在SpringBoot中集成Spring Security.使用gradle项目管 ...

  4. python16_day37【爬虫2】

    一.异步非阻塞 1.自定义异步非阻塞 import socket import select class Request(object): def __init__(self,sock,func,ur ...

  5. 没的选择时,存在就是合理的::与李旭科书法字QQ聊天记录

    2015,8,11,晚上,与李旭科书法字作者,在Q上聊了下 有些资料 涉及到字库设计.字库产业,对大家也有益处 按惯例 没细整理,直接发blog了 ps,9.11 靠,今天是911,早上查资料,在 f ...

  6. mongoose 获取某个存在的collecion 里的数据

    在创建Schma 时指定对应的collection var db_url = 'mongodb://localhost:27017/test'; var db = mongoose.connect(d ...

  7. 远程连接软件TeamViewer

    (1)先在windows下安装Teamviewer软件,地址:https://pan.baidu.com/s/1rWxRBtNbn3OMmg-8YaYWRQ (2)再在linux下安装Teamview ...

  8. bzoj1617 / P2904 [USACO08MAR]跨河River Crossing

    P2904 [USACO08MAR]跨河River Crossing 显然的dp 设$f[i]$表示运走$i$头奶牛,木筏停在未过河奶牛一侧所用的最小代价 $s[i]$表示一次运$i$头奶牛到对面的代 ...

  9. StringBuffer类的常用方法

    StringBuffer类和String一样,也用来代表字符串.只是由于StringBuffer的内部实现方式和String不同,所以StringBuffer在进行字符串处理时,不生成新的对象,在内存 ...

  10. 20155201 2016-2017-2 《Java程序设计》第三周学习总结

    20155201 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 - 第四章要点: 4.1类与对象 类定义时使用class关键词,基本模式为 class na ...