本文介绍的几种定义类或对象的方式中,目前使用最广泛的是:混合的构造函数/原型方式、动态原型方式。不要单独使用经典的构造函数或原型方式。

  1. 工厂方式
  2. 构造器函数
  3. 原型方式
  4. 混合的构造函数/原型方式
  5. 动态原型方式

  工厂方式

/**
* 工厂方式
* 使用此函数可以创建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定义类或对象的方式的更多相关文章

  1. 我所了解的关于JavaScript定义类和对象的几种方式

    原文:http://www.cnblogs.com/hongru/archive/2010/11/08/1871359.html 在说这个话题之前,我想先说几句题外话:最近偶然碰到有朋友问我“hois ...

  2. JavaScript定义类与对象的一些方法

    最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (fu ...

  3. JavaScript定义类的几种方式

    提起面向对象我们就能想到类,对象,封装,继承,多态.在<javaScript高级程序设计>(人民邮电出版社,曹力.张欣译.英文名字是:Professional JavaScript for ...

  4. javascript创建类的6种方式

    javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...

  5. Javascript创建类和对象

    现总结一下Javascript创建类和对象的几种方法: 1.原始的创建方法: <script type="text/javascript"> var person = ...

  6. JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档

    作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...

  7. [原创]Javascript模拟“类”的综合实现方式以及部分细节【截至ES6】

    [原创]Javascript模拟“类”的综合实现方式以及部分细节[截至ES6] 前言   最近几个旧项目里使用的图片编辑插件出现Bug, 经Review 后确定需要在其内外均做些改动,但是头疼的发现部 ...

  8. Javascript定义类(class)的三种方法

    将近20年前,Javascript诞生的时候,只是一种简单的网页脚本语言.如果你忘了填写用户名,它就跳出一个警告. 如今,它变得几乎无所不能,从前端到后端,有着各种匪夷所思的用途.程序员用它完成越来越 ...

  9. [转]Javascript定义类的三种方法

    作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/07/three_ways_to_define_a_javascript_class.html 将近2 ...

随机推荐

  1. 几段Python小程序

    程序片段1 第一个需求是需要生成一些随机的时间,例如需要随机生成从一年前到现在的一些时间,刚开始折腾了半天,最后的代码如下: from datetime import timedelta from d ...

  2. 常用SQL函数

    —————常用SQL函数(实例简述)————— 数据库环境:DB2数据库: 执行工具:Toad for  DB2 1.转字符串:to_char() 日期类型:to_char(birthday,'yyy ...

  3. JAVA软件工程师应该具备哪些基本素质?

    必知:软件企业要求基础软件工程师具备六大基本素质,即良好的编码能力.自觉的规范意识和团队精神.认识和运用数据库的能力.较强的英语阅读和写作能力.具有软件工程的概念和求知欲和进取心. 1.良好的编码能力 ...

  4. PowerShell 解决红字一闪而过问题

    起因 起初只想在 win7上实现 pause 效果而已 cmd /c pause | out-null 结果只能看到红字一闪而过 打开 PowerShell ISE 进行调试 这次清楚的看到红字提示 ...

  5. vue中怎样实现 路由拦截器

    vue中怎样实现 路由拦截器(当用户没有登录的时候,跳转到登录页面,已经登录的时候,不能跳转到登录页,除非后台token失效) 在 我们需要实现这样 一个功能,登录拦截 其实就是 路由拦截,首先在定义 ...

  6. style 使用lang = ‘scss’ 报错

    <style lang="scss" rel="stylesheet/scss" scoped> .export-wrapper{ } </s ...

  7. luoguP1725 琪露诺 单调队列

    DP 方程:$f[i]=max(f[j])+v[i]$ 转移范围:$i-r<=j<=i-l$ 由此我们得知,每次只有 $[i-r,i-l]$ 部分的 $f$ 值对新更新的答案会有贡献. 故 ...

  8. Linux:只复制文件权限和所有者

    在Linux上,怎么把一个文件的<权限和所有者>赋给另一个文件呢? chown命令可以设置所有者和用户组:chmod可以设置文件的权限.这两个命令都支持使用另一个文件做为引用(RFILE) ...

  9. python jieba分词(添加停用词,用户字典 取词频

    中文分词一般使用jieba分词 1.安装 pip install jieba 2.大致了解jieba分词 包括jieba分词的3种模式 全模式 import jieba seg_list = jieb ...

  10. Day6 函数和模块的使用

    函数和模块的使用 在讲解本章节的内容之前,我们先来研究一道数学题,请说出下面的方程有多少组正整数解. $$x_1 + x_2 + x_3 + x_4 = 8$$ 事实上,上面的问题等同于将8个苹果分成 ...