JavaScript对象创建的几种方式
1 工厂模式
1.1 创建
function createFruit(name,colors) {
var o = new Object();
o.name = name;
o.colors = colors;
o.getInfo = function () {
console.log(this.name+"是"+this.colors+"的");
}
return o;
}
var apple = createFruit("苹果",["红色","黄色"]);
1.2 说明
利用水果工厂可以很容易的创建一种新的水果,每个新创建的水果都是包括两个属性和一个方法的Object。因为没有水果对象,所以不能通过instanceof得出苹果是水果的结论。
2 构造函数模式
2.1 创建
function Fruit(name,colors) {
this.name = name;
this.colors = colors;
this.getInfo = function () {
console.log(this.name+"是"+this.colors+"的");
}
}
var apple = new Fruit("苹果",["红色","黄色"]);
2.2 说明
利用构造函数模式可以解决对象识别问题,但其主要问题是每个方法在每个实例上重新创建一遍,没有做到方法的重用。
3 原型模式
3.1 创建
function Fruit() {
}
Fruit.prototype.name = "水果";
Fruit.prototype.colors = [];
Fruit.prototype.getInfo = function () {
console.log(this.name+"是"+this.colors+"的");
}
var apple = new Fruit();
apple.name = "苹果";
3.2 说明
原型模式没办法向构造函数传递参数,原型中所有的属性是被多实例共享的,对于引用类型的共享属性的操作可能引起突出的问题。例如向苹果的颜色属性put一个"红色"(apple.colors.push("红色")),哪么所有水果通过原型访问到的颜色都是"红色",而这是很危险的。
4 组合模式(构造函数与原型)
4.1 创建
function Fruit(name,colors) {
this.name = name;
this.colors = colors;
}
Fruit.prototype = {
constructor : Fruit,
getInfo : function () {
console.log(this.name+"是"+this.colors+"的");
}
}
var apple = new Fruit("苹果",["红色","黄色"]);
4.2 说明
组合模式是最常见的创建自定义对象的方式,构造函数模式用于定义实例属性,原型模式用于定义方法和共享属性。可以最大限度的节省内存。
5 动态原型模式
5.1 创建
function Fruit(name,colors) {
this.name = name;
this.colors = colors;
if(typeof this.getInfo != "function") {
Fruit.prototype.getInfo = function () {
console.log(this.name+"是"+this.colors+"的");
};
}
}
var apple = new Fruit("苹果",["红色","黄色"]);
5.2 说明
很完美的方式,把所有信息都封装在构造函数中。只有在getInfo()方法不存在的情况下,才会将它添加到原型中。原型的这段代码只会在初次调用构造函数时才会执行。
6 寄生构造函数模式
6.1 创建
function Fruit(name,colors) {
var o = {};
o.name = name;
o.colors = colors;
o.getInfo = function () {
console.log(this.name+"是"+this.colors+"的");
}
return o;
}
var apple = new Fruit("苹果",["红色","黄色"]);
6.2 说明
这种方式和工厂模式代码其实是一样的,只是函数名采用了Fruit的首字母大写的形式,并且用new来进行初始化。这种模式可以在特殊的情况下用来为对象创建构造函数。
7 稳妥构造函数模式
7.1 创建
function Fruit(name,colors) {
var o = {};
o.getInfo = function () {
console.log(name+"是"+colors+"的");
}
return o;
}
var apple = Fruit("苹果",["红色","黄色"]);
7.2 说明
稳妥对象(durable objects)是由道格拉斯(douglas)发明。指的是没有公共属性,并且其方法也不引用this的对象。适合在安全环境中实用。
JavaScript对象创建的几种方式的更多相关文章
- JavaScript对象创建的九种方式
1.标准创建对象模式 var person = new Object(); person.name = "Nicholas"; person.age = 29; person.jo ...
- JS对象创建的几种方式整理
本文主要介绍了JS对象创建的几种方式 第一种:Object构造函数创建 var Person = new Object(); Person.name = 'Nike'; Person.age = ...
- 对JS关于对象创建的几种方式的整理
最近一直在看JS高级程序设计这本书,有空来梳理一下几种创建对象的方式.话不多说,直接步入正题. 第一种:Object构造函数创建 var Person = new Object();Person.na ...
- 于Unity3D动态创建对象和创建Prefab三种方式的原型对象
于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...
- 并发编程 ~~~ 多进程~~~进程创建的两种方式, 进程pid, 验证进程之间的空间隔离, 进程对象join方法, 进程对象其他属性
一 进程创建的两种方式 from multiprocessing import Process import time def task(name): print(f'{name} is runnin ...
- Javascript判断数据类型的五种方式及其特殊性
Javascript判断数据类型的五种方式及区别 @ 目录 typeof instanceof Object.prototype.toString isArray iisNaN ----------- ...
- JavaScript声明全局变量的三种方式
JavaScript声明全局变量的三种方式 JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍. 声明方式一: 使用var(关键字)+变量名(标识符)的方式在function外部声明,即为 ...
- javascript中创建对象的几种方式
1. 使用Object构造函数来创建一个对象,下面代码创建了一个person对象,并用两种方式打印出了Name的值. var person = new Object(); person.name=&q ...
- JavaScript事件处理程序的3种方式
最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,首先跟大家在马海祥博客上跟大家分享的是JavaScript ...
随机推荐
- C语言第二次实验报告
1.实验题目 题1:11-7 找鞍点(20 分) 一个矩阵元素的"鞍点"是指该位置上的元素值在该行上最大.在该列上最小. 本题要求编写程序,求一个给定的n阶方阵的鞍点 题2: ...
- destoon分页
<?php //控制分页//分页$pagesize=4;$pagesql="SELECT COUNT(*) AS num FROM `{$DT_PRE}` company"; ...
- Django实现组合搜索
一.实现方法 1.纯模板语言实现 2.自定义simpletag实现(本质是简化了纯模板语言的判断) 二.基本原理 原理都是通过django路由系统,匹配url筛选条件,将筛选条件作为数据库查询结果,返 ...
- system进程占用80端口
服务器规划:apache分配80,iis分配其他端口 理论上,只需要把iis 默认站点的80端口改成其他端口就可以了,可是发现改了apache80端口还是用不了, cmd查了下,发现system进程占 ...
- linux 动态库的符号冲突问题
最近,给同事定位了一个符号表的冲突问题,简单记录一下. A代码作为静态链接库,被包含进了B代码,然后编译成了动态链接库,B.so A代码同时作为静态链接库,被编译进入了main的主代码. main函数 ...
- SpringMvc4.x--@ControllerAdvice注解
通过@ControllerAdvice.我们可以将对于控制器的全局配置放置在同一个位置,注解了@ControllerAdvice的类的方法可以使用@ExceptionHandler,@InitBind ...
- python_print和input
什么是输入? --用户从键盘.鼠标或其他终端 输入 的数据 -- input("提示信息") --python 2.7 rqw_input("提示信息") 如何 ...
- maven依赖问题
我的一个maven项目A依赖于我的另一个maven项目B,但是maven dependencies中显示的是文件.如下图: 而且项目A部署的时候,部署到tomcat容器的时候也是直接部署的B的编译后的 ...
- 无废话XML--XML解析(DOM和SAX)
XML处理模式 处理XML有2种方式,DOM和SAX.一般的实际开发中,这2种使用的不多,直接用dom4j来解析XML就好了,包括CRUD等操作都很方便的.这里介绍的DOM和SAX是比较底层的,具体的 ...
- 一个ios的各种组件、代码分类,供参考
http://github.ibireme.com/github/list/ios/#