javascript定义类或对象的方式
本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式、动态原型方式。不要单独使用经典的构造函数或原型方式。
工厂方式
/**
* 工厂方式
* 使用此函数可以创建2个属性完全相同的对象。
* 每次调用函数Car(),都要创建showcolor(),意味着每个对象都有一个自己的showcolor()方法。
* @returns
*/
function fac_Car(){
var ocar = new Object();
ocar.color = "blue";
ocar.doors = 4;
ocar.showColor = function(){
document.write(this.color);
};
return ocar;
}
var fac_car1 = fac_Car();
var fac_car2 = fac_Car();
构造器函数
/**
* 构造函数方式
* 在函数内部没有创建对象,是用this关键字。
* 同工厂方式一样。每次调用都会为对象创建自己的方法。
*/
function con_Car(color,door){
this.color = color;
this.doors = door;
this.showColor = function(){
alert(this.color);
};
}
var con_car1 = new con_Car("red",4);
var con_car2 = new con_Car("blue",4);
原型方式
/**
* 原型方式
* 利用了对象的prototype属性。
* 首先用空函数创建类名,然后prototype属性来定义对象的属性。
* 所有该函数的对象存放的都是指向showColor()的指针,语法上看起来都属于同一个对象。
* 当属性指向的是对象时,如数组。一个对象的值改变时在另一个对象中也可以看到
*/
function pro_Car(){}
pro_Car.prototype.color = "red";
pro_Car.prototype.doors = 4;
pro_Car.prototype.showColor = function(){
alert(this.color);
};
var pro_car1 = new pro_Car();
var pro_car2 = new pro_Car();
pro_car1.arr.push("cc");
alert(pro_car1.arr); //output:aa,bb,cc
alert(pro_car2.arr); //output:aa,bb,cc
混合的构造函数/原型方式
/**
* 混合的构造函数/原型方式
* 用构造函数定义对象的非函数属性,用原型方式定义对象的方法。
*/
function con_pro_Car(color,door){
this.color = color;
this.doors = door;
this.arr = new Array("aa","bb");
}
con_pro_Car.prototype.showColor(){
alert(this.color);
}
var con_pro_car1 = new con_pro_Car("red",4);
var con_pro_car2 = new con_pro_Car("blue",4);
con_pro_car1.arr.push("cc");
alert(con_pro_car1.arr); //output:aa,bb,cc
alert(con_pro_car2.arr); //output:aa,bb
动态原型方式
/**
* 动态原型方式
* 动态原型的方式同混合的构造函数/原型方式原理相似。唯一的区别就是赋予对象方法的位置。
* 动态原型方式是使用一个标志来判断是否已经给原型赋予了方法。这样可以保证该方法只创建一次
*/
function dyn_pro_Car(color,door){
this.color = color;
this.doors = door;
this.arr = new Array("aa","bb");
if(typeof dyn_pro_Car._initialized == "undefined"){
dyn_pro_Car.prototype.showColor = function(){
alert(this.color);
};
dyn_pro_Car._initialized = true;
};
};
(本文仅供学习交流,欢迎大家共同探讨学习~)
javascript定义类或对象的方式的更多相关文章
- 我所了解的关于JavaScript定义类和对象的几种方式
原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...
- JavaScript定义类与对象的一些方法
最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...
- JavaScript定义类的几种方式
提起面向对象我们就能想到类,对象,封装,继承,多态.在<javaScript高级程序设计>(人民邮电出版社,曹力.张欣译.英文名字是:Professional JavaScript for ...
- javascript创建类的6种方式
javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...
- Javascript创建类和对象
现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...
- JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...
- [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】
[原创]Javascript模拟“类”的综合实现方式以及部分细节[截至ES6] 前言 最近几个旧项目里使用的图片编辑插件出现Bug, 经Review 后确定需要在其内外均做些改动,但是头疼的发现部 ...
- Javascript定义类(class)的三种方法
将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...
- [转]Javascript定义类的三种方法
作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...
随机推荐
- Excel的用到的常规的技巧
这几天在做各种发票的报表,好几百的数据当然离不开EXCel,自己又是个白班,就记录下啦! EXCEL 判断某一单元格值是否包含在某一列中 就在Excel的表格中加入这个函数:=IF(ISERROR(V ...
- C# 7.0新加特性
以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ...
- std::string格式化输入输出
在C语言中: C函数有sprintf函数, 比较方便, 但是需要知道所需要的内存空间是多少. 在C++的框架MFC中: 在MFC中CString 有Format函数来格式化字符串. 很方便. 难过的是 ...
- 安卓Queue的使用
Queue的成员函数 add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 rem ...
- 初识cocos creator的一些问题
本文的cocos creator版本为v1.9.01.color赋值cc.Label组件并没有颜色相关的属性,但是Node有color的属性. //如果4个参数,在ios下有问题let rgb = [ ...
- RecyclerView 悬浮/粘性头部效果3种方式
但是以上两种方式onDrawOver()方法实现逻辑对初次查看该段代码要花时间理解.下面代码逻辑(原理一样,同样参考大神代码)相对清晰,易理解 public class StickyDecoratio ...
- Linux 僵尸进程如何处理
Linux 允许进程查询内核以获得其父进程的 PID,或者其任何子进程的执行状态.例如,进程可以创建一个子进程来执行特定的任务,然后调用诸如 wait() 这样的一些库函数检查子进程是否终止.如果子进 ...
- 爬虫系列(十二) selenium的基本使用
一.selenium 简介 随着网络技术的发展,目前大部分网站都采用动态加载技术,常见的有 JavaScript 动态渲染和 Ajax 动态加载 对于爬取这些网站,一般有两种思路: 分析 Ajax 请 ...
- 突如其来的“中断异常”,我(Java)该如何处理?
3.try-catch块 try语句块中代码执行时发生三种情况: try语句块中代码正常执行完毕,没有任何异常,那么catch语句块的代码将不会被执行. import java.util.*; pub ...
- NLTK学习笔记(五):分类和标注词汇
目录 词性标注器 标注语料库 表示已经标注的标识符:nltk.tag.str2tuple('word/类型') 读取已经标注的语料库 名词.动词.形容词等 尝试找出每个名词类型中最频繁的名词 探索已经 ...