js定义类或对象

<!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

时间: 2024-10-12 13:32:16

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

JS定义类及对象

JS定义类及对象 1.工厂方式 <script type="text/javascript"> function createObject(name){ var p = new Object(); p.name=name; p.say = function(){alert(p.name+'ff');} return p; } var p1 = createObject("p1"); var p2 = createObject("p2"

js自定义类与对象

js中创建自定义类与创建对象:js创建类与AS3,java都有很大的不同,,,下面来看看他的庐山真面目..由于js也是一个面向对象的编程语言所以也存在像其他语言那样的创建自定义的类,和通过类来创建对象.js的类是有一下三部门组成1.构造函数2.属性3.方法自定义一个类: function MyClass(id,age,name) { this.id = id; this.age = age; this.name = name; } 从这个类的定义形式可以看出,js定义类的形式和其他语言有很大的不

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

最近偶然碰到有朋友问我"hoisting"的问题.即在js里所有变量的声明都是置顶的,而赋值则是在之后发生的.可以看看这个例子: 1 var a = 'global'; 2 (function () { 3     alert(a); 4     var a = 'local'; 5 })(); 大家第一眼看到这个例子觉得输出结果是什么?'global'?还是'local'?其实都不是,输出的是undefined,不用迷惑,我的题外话就是为了讲这个东西的. 其实很简单,看一看JavaS

JS创建类和对象

JavaScript 创建类/对象的几种方式 非常好的一篇讲类和对象的文章,逐一测试,加深记忆:http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组

JS定义类的六种方式详解

转载自: http://www.jb51.net/article/84089.htm 在前端开发中,经常需要定义JS类.那么在JavaScript中,定义类的方式有几种,分别是什么呢?本文就JS定义类的六中方式说明如下(案例说明): 1.工厂方式 ? 1 2 3 4 5 6 7 8 9 10 11 function Car(){ var ocar = new Object; ocar.color = "blue"; ocar.doors = 4; ocar.showColor = fu

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

http://www.cnblogs.com/tiwlin/archive/2009/08/06/1540161.html 这是别人写的~~~我借来看看 JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像

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

JavaScript 创建类/对象的几种方式 在JS中,创建对象(Create Object)并不完全是我们时常说的创建类对象,JS中的对象强调的是一种复合类型,JS中创建对象及对对象的访问是极其灵活的. JS对象是一种复合类型,它允许你通过变量名存储和访问,换一种思路,对象是一个无序的属性集合,集合中的每一项都由名称和值组成(听起来是不是很像我们常听说的HASH表.字典.健/值对?),而其中的值类型可能是内置类型(如number,string),也可能是对象. 一.由一对大括号括起来 var

【05】 定义类或对象

ECMAScript 定义类或对象 ECMAScript 拥有很多创建基类的方法. (就是说,可以任意的创建类似其他语言的“类”的概念.来创造不同模具,来形成模型.实例,就是我们所谓的模型) 一:原始方式(魔芋:最简单的方式.缺点:无法创建多个实例.此时,对象无法作为模具.) 因为对象的属性和方法可以在对象创建后动态定义,可以编写下面的代码: (魔芋:创建一个对象后,可以任意在很多位置给它添加属性和方法.) var Car=newObject; Car.color ="blue"; C

javascript学习笔记---ECMAScriptECMAScript 对象----定义类或对象

使用预定义对象只是面向对象语言的能力的一部分,它真正强大之处在于能够创建自己专用的类和对象. ECMAScript 拥有很多创建对象或类的方法. 原始的方式 因为对象的属性可以在对象创建后动态定义(后绑定),类似下面的代码: var oCar = new Object; oCar.color = "blue"; oCar.doors = 4; oCar.mpg = 25; oCar.showColor = function() { alert(this.color); };不过这里有一