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. grep命令做永久别名 显示颜色

    grep命令做永久别名  显示颜色 http://jingyan.baidu.com/article/22fe7ced17c1543002617f9c.htmlhttp://blog.csdn.net ...

  2. docker镜像文件导入与导出,支持批量

    工作中经常需要拉取一些国外的镜像,但是网络限制等原因在公司拉取很慢,所以我习惯用亚马逊服务器拉取镜像,导出后下载到本地再导入开发环境 1. 查看镜像id sudo docker images REPO ...

  3. springboot 使用model重定向到html模板,对数据进行展示

    1:使用springboot, ,html使用thymeleaf,nekohtml模板 在build.gradle中添加依赖 buildscript { repositories { mavenCen ...

  4. PAT 1044 Shopping in Mars[二分][难]

    1044 Shopping in Mars(25 分) Shopping in Mars is quite a different experience. The Mars people pay by ...

  5. python基础之if语句

    python之if语句 通用格式 if <test1>: <do something> elif: <do something> else: <do some ...

  6. 索引查找Java实现

    package 索引查找; import java.util.Scanner; public class IndexSearch { public static long stu[] = { 1080 ...

  7. iOS error: -34018

    一般报这个错误是由于操作keychain 报的错. 遇到该情况的情况: 1.是否打开权限 2.苹果自身的bug,传送门:https://stackoverflow.com/questions/2974 ...

  8. Linux内核参数之arp_ignore和arp_announce

    一.arp_ignore和arp_announce介绍 arp_ignore和arp_announce参数都和ARP协议相关,主要用于控制系统返回arp响应和发送arp请求时的动作.这两个参数很重要, ...

  9. 一个Golang例子:for + goroutine + channel

    Rob Pike 在 Google I/O 2012 - Go Concurrency Patterns 里演示了一个例子(daisy chain). 视频地址:https://www.youtube ...

  10. 基于OpenCV进行图像拼接原理解析和编码实现(提纲 代码和具体内容在课件中)

    一.背景 1.1概念定义 我们这里想要实现的图像拼接,既不是如题图1和2这样的"图片艺术拼接",也不是如图3这样的"显示拼接",而是实现类似"BaiD ...