`
fantaxy025025
  • 浏览: 1329810 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

javascript_创建类和对象_小结

阅读更多

javascript中的类和对象创建方式

 

一、构造函数+原型方式

创建一个对象,构造函数是最直接的方式了,不论对编译型的java还是解释型的ruby,都用new来创建对象。javascript也可以用new来创建。

例子:

        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();

因为javascript中的函数也是一个对象,这种方式就导致了一个问题:每new一个对象,就重复创建一个一模一样的“方法对象”。

因为方法也是一个对象(方法对象),那么可否在构造函数里再增加一个参数呢?可以,如下。这种方式有点儿ruby的味道了(传递一个方法),但是这不符合习惯(方法在类内建立),也不符合科学(建立很多方法总不能这么传递进去吧)。接着往下看。

        showColor = function () {
            alert(this.color);
        };
        function Car(sColor, iDoors, iMpg, fnShowColor) {
            this.color = sColor;
            this.doors = iDoors;
            this.mpg = iMpg;
            this.showColor = fnShowColor
        }
        var oCar1 = new Car("red", 4, 23, showColor)
        var oCar2 = new Car("blue", 3, 25, showColor)
        oCar1.showColor()
        oCar2.showColor()

进一步的解决方式是,利用javascript的prototype属性,可以让所有new的对象“继承”同一个方法。

这种方式遗留的一个缺点是不好看:一个函数定义在了类之外。

//用构造方法设置属性,用原型方法设置函数(因为函数是共享的)
        function Car(sColor, iDoors, iMpg) {
            this.color = sColor;
            this.doors = iDoors;
            this.mpg = iMpg;
            this.drivers = new Array("Mike", "Sue");
        }
        Car.prototype.showColor = function () {
            alert(this.color);
        };
        var oCar1 = new Car("red", 4, 23);
        var oCar2 = new Car("blue", 3, 25);
        oCar1.drivers.push("Matt");
        alert(oCar1.drivers); //outputs "Mike,Sue,Matt"
        alert(oCar2.drivers); //outputs "Mike,Sue"
 

二、动态的原型方式

 

        function Car(sColor, iDoors, iMpg) {
            this.color = sColor;
            this.doors = iDoors;
            this.mpg = iMpg;
            this.drivers = new Array("Mike", "Sue");
            if (typeof Car._initialized == "undefined") {//这个大括号里定义原型方法
                Car.prototype.showColor = function () {
                    alert(this.color);
                };
                Car._initialized = true;
            }
        }

似乎这种方式最完美,不过也引入了额外的判断代码。

注意:Car是构造方法,javascript中方法是对象,对象可以有属性,而且可以动态添加。这个_initialized属性就是这么来的。

 

三、工厂方式(很少使用)

工厂方式就是在工厂内new一个Object,之后把工厂方法的参数赋给这个对象。

function createCar(sColor, iDoors, iMpg) {
var oTempCar = new Object;
oTempCar.color = sColor;
oTempCar.doors = iDoors;
oTempCar.mpg = iMpg;
oTempCar.showColor = function () {
alert(this.color)
};
return oTempCar;
}
var oCar1 = createCar(“red”, 4, 23);
var oCar1 = createCar(“blue”, 3, 25);
oCar1.showColor(); //outputs “red”
oCar2.showColor(); //outputs “blue”

这种方式也有重复建立方法的问题。一个改进如下,但更让代码难看。

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(); //outputs “red”
oCar2.showColor(); //outputs “blue”

 综合来看,这种方式适合做框架用,但不如前两种易于理解和使用(没关)。

 

+——

+——

+——

)顺便说一句,javaeye或iteye这个编辑器真难用,老出现下面的乱码。真是受不了了。

 

  1.             <SPAN style= "COLOR: #000000" > if  ( typeof  Car._initialized ==  "undefined" ) { //这个大括号里定义原型方法</SPAN>   
  2.   
  3.                 Car.prototype.showColor =  function  () {   
  4.                     alert( this .color);   
  5.                 };   
  6.            <SPAN style= "COLOR: #0000ff" >     <SPAN style= "COLOR: #000000" >Car._initialized =  true ;</SPAN>   
  7. </SPAN>  

 

+——

+——

+——

 

分享到:
评论

相关推荐

    javascript面向对象创建对象的方式小结.docx

    ### JavaScript面向对象创建对象的方式小结 #### 一、引言 在JavaScript中,面向对象编程(OOP)是一种非常重要的编程范式。它通过创建和操作对象来组织代码,提高代码的复用性和可维护性。本文将详细介绍...

    Javascript 面向对象编程小结

    面向对象编程(Object-Oriented Programming,OOP)是JavaScript中的一个重要概念,它允许我们通过对象和类来组织和管理代码,提高代码的可重用性和可维护性。这篇博客“JavaScript 面向对象编程小结”可能涵盖了...

    JavaScript常用本地对象小结_.docx

    JavaScript是一种面向对象的编程语言,它的核心特性包括封装、聚集、继承和多态。封装允许我们将数据和相关的方法组织在一起,形成对象。聚集则是将一个对象包含在另一个对象内部,以此构建复杂的数据结构。继承使得...

    javascript对象的相关操作小结

    JavaScript中的对象是编程的核心概念,它们允许我们组织和存储数据,并通过方法进行操作。下面是对JavaScript对象相关操作的总结。 1. **BOM (Browser Object Model)** 浏览器对象模型是JavaScript与浏览器交互的...

    JavaScript中textRange对象使用方法小结

    JavaScript中的TextRange对象是一个用于操作HTML文档中文本流的重要接口,它允许开发者对页面中的文本执行一系列操作,如选择、搜索和修改。TextRange对象属于动态HTML(DHTML)的一部分,能够帮助开发者实现更加...

    JavaScript定义类或函数的几种方式小结

    类可以理解为创建对象的模板,而对象则是类的具体实例。JavaScript是一种基于原型的面向对象语言,其类和对象的定义方式与传统面向对象的语言(如Java或C++)有所不同。 JavaScript中定义类或函数,主要有以下几种...

    每天一篇javascript学习小结(面向对象编程)

    在JavaScript中,工厂方法是一种创建对象的模式,通过函数来创建具有特定属性和方法的对象实例。例如: ```javascript function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = ...

    javascript面向对象创建对象的方式小结

    创建对象的方式多种多样,每种方式都有其特点和应用场景。本文将结合实例形式总结分析JavaScript中常见的七种创建对象的方式。 1. 通过内置Object对象的方式创建 这种方式通过调用Object构造函数创建新对象,然后...

    JavaScript初学小结

    这篇小结将深入探讨JavaScript的基础知识,包括语法、数据类型、控制结构、函数、对象以及它在实际开发中的应用。 一、基础语法 JavaScript的语法与C++和Java相似,但它是一种弱类型的语言,意味着变量在声明时无需...

    javascript面试应急知识点小结

    这篇小结将聚焦于JavaScript的基础和进阶知识,帮助你在面试中表现出色。以下是对"javascript面试应急知识点小结"的详细解析。 一、基础概念 1. 变量与数据类型:JavaScript有七种数据类型,包括基本数据类型...

    JavaScript创建对象方法实例小结

    本文实例讲述了JavaScript创建对象方法。分享给大家供大家参考,具体如下: 最简单的方式就是创建一个Object对象,并为其添加属性和方法。 //示例代码 var person=new Object() person.name=yumi person.age=18 ...

    JavaScript创建对象的方式小结(4种方式)

    在JavaScript中创建对象有多种方式,尽管JavaScript不严格遵循传统意义上的面向对象语言特性,比如继承、封装和多态,但它提供了一些方法和技巧来模拟面向对象的行为。以下将详细阐述文章中提到的四种创建JavaScript...

    javascript div小结

    在这个`javascript div小结`中,我们将深入探讨JavaScript如何与`div`元素交互,包括选择、操作、动态创建以及CSS样式修改等关键知识点。 首先,我们可以通过JavaScript的DOM(Document Object Model)接口来获取和...

    JavaScript 创建对象和构造类实现代码

    ### JavaScript 创建对象和构造类实现代码 在JavaScript中,创建对象和定义类是进行面向对象编程的基础。本文将深入探讨几种不同的创建对象的方法以及如何通过构造函数和原型链来实现类的概念。 #### 1. 使用对象...

    JavaScript对象学习小结

    在JavaScript中,一切皆为对象,包括基本数据类型如字符串(String)、数值(Number)、数组(Array)和函数(Function)。对象是由属性(properties)和方法(methods)组成的特殊数据类型,它们允许我们存储和操作...

    Javascript猎取当前时间函数和时间操作小结_.docx

    在实际开发中,JavaScript的日期处理不仅限于基本的获取和设置,还可以用于创建复杂的日历功能、计时器、倒计时等。同时,现代JavaScript提供了`Date.now()`用于获取当前时间的毫秒值,以及`Intl.DateTimeFormat`...

    JavaScript模式中文[pdf] 百度云

     小结  第3章 字面量和构造函数  对象字面量  自定义构造函数  强制使用new的模式  数组字面量  JSON  正则表达式字面量  基本值类型包装器  错误对象  小结  第4章 函数  背景  回调模式  返回函数 ...

Global site tag (gtag.js) - Google Analytics