<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>js oop 总结</title>
</head>
<body>
<script>
/*1 原始方式
*缺点:需要创建多个car实例,推荐等级★ */
var ocar = new Object();
ocar.color = "blue";
ocar.doors = 4;
ocar.mpg = 25;
ocar.showColor = function(){
alert(this.color);
}
ocar.showColor(); //2 原始工厂方式
//缺点:重复生成函数,推荐等级★★
function createCar(){
var oTempCar = new Object();
oTempCar.color = "blue";
oTempCar.doors = 4;
oTempCar.mpg = 25;
oTempCar.showColor = function(){
alert(this.color);
}
return oTempCar;
}
var oCar1 = createCar();
var oCar2 = createCar();
oCar1.showColor();
oCar2.showColor();
//3 在工厂函数外定义对象的方法,推荐等级★★★
function showColor() {
alert(this.color);
} function createCar(sColor,iDoors,iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = showColor;
return oTempCar;
} var oCar1 = createCar("red",4,23);
var oCar2 = createCar("blue",3,25); oCar1.showColor(); //输出 "red"
oCar2.showColor(); //输出 "blue" //4 构造函数方式
//缺点:构造函数会重复生成函数,推荐等级★★
function Car(sColor,iDoors,iMpg){
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.showColor = function(){
alert(this.color);
}
}
var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",3,25);
oCar1.showColor();
oCar2.showColor();
//5 原型方式,
//缺点:必须在对象创建后才能改变属性的默认值,推荐等级★★
function Car(){} Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.showColor = function(){
alert(this.color);
}
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.showColor();
oCar2.showColor();
//我和我的小伙伴惊呆了
//缺点2:真正的问题出现在属性指向的是对象,而不是函数时。函数共享不会造成问题,但对象却很少被多个实例共享
function Car(){}
Car.prototype.color = "blue";
Car.prototype.doors = 4;
Car.prototype.mpg = 25;
Car.prototype.drivers = new Array("Mike","John");
Car.prototype.showColor = function(){
alert(this.colorj);
}
var oCar1 = new Car();
var oCar2 = new Car();
oCar1.drivers.push("Bill");
alert(oCar1.drivers);
alert(oCar2.drivers);
//6混合的构造函数/原型方式
//即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)
//推荐等级★★★★★ 八心八箭,吐血推荐
//目前使用最广泛的是混合的构造函数/原型方式
function Car(sColor,iDoors,iMpg){
this.Color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = new Array("Mike","John");
}
Car.prototype.showColor = function(){
alert(this.color);
}
var oCar1 = new Car("red",4,23);
var oCar2 = new Car("blue",45,41);
oCar1.drivers.push("Bill");
alert(oCar1.drivers);
alert(oCar2.drivers);
</script>
</body>
</html>

参考资料: http://www.w3school.com.cn/js/pro_js_object_defining.asp

js定义类或对象的更多相关文章

  1. ES5:深入解析如何js定义类或对象。

    1.原始方式 var oCar = new  Object; oCar.color = "blue"; oCar.showColor = function(){alert(this ...

  2. JS定义类及对象

    1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Obje ...

  3. JS创建类和对象

    JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活 ...

  4. JS创建类和对象(好多方法哟!)

    http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 ...

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

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

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

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

  7. JS创建类和对象,看完了,头就不大了

    JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活 ...

  8. JS定义类的六种方式详解

    转载自: http://www.jb51.net/article/84089.htm 在前端开发中,经常需要定义JS类.那么在JavaScript中,定义类的方式有几种,分别是什么呢?本文就JS定义类 ...

  9. 优雅地创建未定义类PHP对象

    在PHP中,如果没有事先准备好类,需要创建一个未定义类的对象,我们可以采用下面三种方式: new stdClass() new class{} (object)[] 首先是stdClass,这个类是一 ...

随机推荐

  1. ABP入门教程

    ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...

  2. 当<script>中的type等于text/html的妙用

    我们可以在<script>片断中定义一个被JS调用的代码,但代码又不在页面上显示,这时,我们可以使用下面的方法: <script id="commentTemplate&q ...

  3. JS的parent对象

    top: 该变更永远指分割窗口最高层次的浏览器窗口.如果计划从分割窗口的最高层次开始执行命令,就可以用top变量. parent: 该变量指的是包含当前分割窗口的父窗口.如果在一个窗口内有分割窗口,而 ...

  4. Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView

    于MenuScene.cpp 点击单机游戏后会调用 Director::getInstance()->pushScene(MapChooseScene::createScene()); 进入到关 ...

  5. nginx 开展对RT5350

    编译成功nginx的mips该平台后,,至make install生成的文件到一个角落rt5350文件系统. 必须指出的是,在,被放置在文件系统中需要安装文件夹和编译一致:候有release的文件夹, ...

  6. Java数据结构与算法(2) - ch03排序(冒泡、插入和选择排序)

    排序需要掌握的有冒泡排序,插入排序和选择排序.时间为O(N*N). 冒泡排序: 外层循环从后往前,内存循环从前往后到外层循环,相邻数组项两两比较,将较大的值后移. 插入排序: 从排序过程的中间开始(程 ...

  7. 数据传输对象(DTO)介绍及各类型实体比较

    数据传输对象(DTO)介绍及各类型实体比较 本文将介绍DDD分层架构中广泛使用的数据传输对象Dto,并且与领域实体Entity,查询实体QueryObject,视图实体ViewModel等几种实体进行 ...

  8. easyui datagrid 单元格编辑 自动聚焦 、全选

    $.extend($.fn.datagrid.methods, { editCell: function (jq, param) { return jq.each(function () { var ...

  9. JavaScript语言基础知识11

    JavaScript字符的比较. 在接下来的学习内容的开始,我们先来看一下alert()此功能,它是一个消息框. OK,接下来正式介绍代码: <HTML> <HEAD> < ...

  10. how tomcat works 读书笔记九 Session管理

    在看本文之前,请先查阅相关Session与Cookie的资料. 这篇资料不错 http://blog.csdn.net/fangaoxin/article/details/6952954 Catali ...