`
Andrew1945
  • 浏览: 13144 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

js中类或对象的几种创建方式

阅读更多
  js中对象的创建有多种方式,下面就是我整理的几种创建方式,有什么问题还希望大家提点一下哈。
1.工厂方式:创建并且返回特定类型对象的工厂函数
function createCar() {
    var car = new Object();
    car.color = "red";
    car.doors = 4;
    car.mpg = 23;
    car.showColor = function(){
        alert(this.color);
    };
    return car;
};
var car1 = createCar();
var car2 = createCar();
当执行createCar()函数时,将创建新对象Object,并且赋予它属性,但是也可以修改createCar()方法,让其可以传递参数对各个属性进行赋值。但是这种方法创建对象导致的结果就是每次创建对象的时候都会重复创建方法showColor(),但事实上,我们需要的是每个对象都共享同一个函数。从而程序可以这样修改:
function showColor(){
    alert(this.color);
};

function createCar(color,doors,mpg) {
    var car = new Object();
    car.color = color;
    car.doors = doors;
    car.mpg = mpg;
    car.showColor = showColor;
    return car;
};
var car1 = createCar("red",4,23);
var car2 = createCar("blue",3,25);
car1.showColor();  //打印  "red"
car2.showColor();  //打印  "blue"
但是这种方式去创建看起来还是不怎么爽啊,那我们来看看下面的创建方式怎么样。

2.构造函数方式:创建构造函数和工厂函数很像,那我们来看看例子吧。
function Car(color,doors,mpg){
    this.color = color;
    this.doors = doors;
    this.mpg = mpg;
    this.showCar = function(){
        alert(this.color);
    };
};
var car1 = new Car("red",4,23);
var car2 = new Car("blue",3,25);
这段代码和工厂方式的差别是构造函数内部没有创建对象,而是用了this关键字,这种方式创建对象和工厂方式没有什么多大的区别,每个对象都创建了不同版本的函数,也可以用外部函数去重写构造函数。下面我们就来看看什么样的方式可以解决上面的问题。

3.原型方式:该方式利用对象的prototype属性,可以把它看成创建新对象所依赖的原型,我们来看看例子吧,看看到底是怎么回事。
function Car(){
};
Car.prototype.color = "red";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.drivers = new Array("aa","bb");
Car.prototype.showColor = function(){
    alert(this.color);
};

var car1 = new Car();
var car2 = new Car();

car1.drivers.push("cc");
alert(car1.drivers);  //outputs "aa,bb,cc"
alert(car2.drivers);  //outputs "aa,bb,cc"
这种方式解决了前面的重复创建函数的不足,但是这种创建方式的弊端也非常之大,第一构造函数没有参数,所以只有在创建对象后才能改变属性值,这点很让人不爽哈;第二也是比较重要的一点就是它的属性对象是共享的,也就是说一个对象去改变,另一个对象就会受到影响。那我们有没有更好的解决办法呢,请看下面这种方式。

4.混合的构造函数/原型方式:结合构造函数和原型方式,就像其他的程序语言一样,即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性,结果所有的函数都只创建一次,而每个对象都具有自己的对象属性实例。例如:
function Car(color,doors,mpg){
    this.color = color;
    this.doors = doors;
    this.mpg = mpg;
    this.drivers = new Array("aa","bb");
};
Car.prototype.showColor = function(){
    alert(this.color);
};
var car1 = new Car("red",4,23);
var car2 = new Car("blue",3,25);

car1.drivers.push("cc");

alert(car1.drivers);  //outputs "aa,bb,cc"
alert(car2.drivers);  //outputs "aa,bb"
现在是不是更像一般对象的创建了,这种方式已经解决了上面几种方式创建对象的不足之处了,但是这种方式也不是最好的方式,那么我们就来看看还有上面更好的创建方式吧!

5.动态原型方法:动态原型方法的基本思想与混合的构造函数/原型方式相同,唯一的区别是赋予对象方法的位置。我们来看一下:
function Car(color,doors,mpg){
    this.color = color;
    this.doors = doors;
    this.mpg = mpg;
    this.drivers = new Array("aa","bb");
   
    if(typeof Car.initialized == "undefined"){
        Car.prototype.showColor = function(){
            alert(this.color);
        };
        Car.initialized = true;
    }
};
简单一点说,这种方式就好比Java中的sigleton.我们在来看看最后一种方式.

6.混合工厂方式:创建假构造函数,只返回另一种对象的新实例:
function Car(){
    var tempCar = new Object();
    tempCar.color = "red";
    tempCar.doors = 4;
    tempCar.mpg = 23;
    tempCar.showColor = function(){
        alert(this.color);
    };
    return tempCar;
};
var car = new Car();
这种方式与之前的工厂方式不同,它用了new运算符,看起来像真正的构造函数,但是这种方式不建议使用。

好了,这些是我一些总结,希望大家多给点意见哈!
分享到:
评论
7 楼 ljz0898 2010-08-27  
lz辛苦了,不错的!学习了!
6 楼 Andrew1945 2010-08-27  
其实说到底,这些创建方式就是去模拟Java或其他编程语言中创建对象的方式。
5 楼 cloudgamer 2010-08-26  
好像跟书的一样
4 楼 gaozi131 2010-08-26  
已经很不错了 学习了 感谢分享
3 楼 wjywjy678 2010-08-26  
http://www.iteye.com/topic/697430

这个比你的好,人家推荐了用法
2 楼 fashionia 2010-08-23  
《javascript高级程序设计》。。。
你从这个里面抄过来的?
不过还是辛苦了。。。。。。。。
1 楼 Andrew1945 2010-08-23  
都没人回个帖,给点意见吗!

相关推荐

    在js中创建类和对象

    在JavaScript中,创建类和对象是面向对象编程的基础。本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的...

    javascript创建对象的方式(二)

    这里我们将深入探讨几种常见的创建对象的方式。 1. **构造函数**: JavaScript中的构造函数是一种特殊类型的函数,可以用来创建和初始化一个对象。通过`new`关键字调用构造函数,可以创建一个新的对象实例。例如:...

    JavaScript学习之二 — JavaScript创建对象的8种方式

    工厂函数是一种创建对象的抽象方式,可以返回任意类型的对象。 ```javascript function createPerson(name, age) { return { name: name, age: age, sayHello: function() { console.log('Hello!'); } }; ...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式).docx

    ### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...

    【JavaScript源代码】详解js创建对象的几种方式和对象方法.docx

    本文将深入探讨JavaScript中创建对象的几种常见方式以及对象方法。 首先,我们来看“工厂模式”。工厂模式是一种创建对象的抽象方式,通过一个函数来返回一个新的对象。例如: ```javascript function getObj(name...

    js创建对象的几种方式

    1.new Object() 2.字面量创建对象 构造函数创建对象 工厂模式

    JAVASCRIPT中定义对象的几种方式.pdf

    在讨论JavaScript中定义对象的几种方式之前,我们先理解一下JavaScript中的对象到底是什么。JavaScript是一种基于原型的编程语言,对象是其核心概念之一。对象可以被视为一个容器,存储各种键值对集合,键为属性名,...

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

    JavaScript中定义类或函数,主要有以下几种方式: 1. 工厂方式 工厂方式是JavaScript中创建对象的一种模式,它通过一个工厂函数来封装创建对象的代码。通过工厂函数,我们可以创建多个具有相同属性和方法的对象实例...

    javascript创建对象的方式(一)

    这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...

    JS 创建对象(常见的几种方法)

    下面我们逐一分析给定文件中所提到的几种创建对象的方法。 首先是使用构造函数模式创建对象。构造函数是JavaScript中一种非常常见的创建对象的方式。通过定义一个具有共同属性和方法的构造函数,我们可以使用new...

    JavaScript定义类的几种方式总结

    JavaScript定义类的几种方式包括工厂方式、构造函数和原型方式,每种方法都有其特点和适用场景,接下来我们将详细探讨。 工厂方式是最早期的面向对象编程在JavaScript中的实践之一。使用工厂方式定义类,本质上就是...

    JS创建对象的几中方式

    在JavaScript中,创建对象有多种方法,每种方式都有其优缺点。以下是对这些方法的详细解释: 1. **工厂方式**: 工厂函数是通过一个函数来创建对象,它可以根据需要设置属性和方法。然而,这种方法的缺点是每个...

    JS 5种遍历对象的方式

    感觉事情并不这么简单,于是我仔细看了一下这几种遍历对象的方法的区别 for in for in 循环是最基础的遍历对象的方式,它还会得到对象原型链上的属性 // 创建一个对象并指定其原型,bar 为原型上的属性 const obj =...

    在javascript中创建对象的各种模式解析

    在JavaScript中创建对象主要涉及以下几种模式: 1. 工厂模式 工厂模式是最早期的对象创建方式之一,它通过一个函数来创建对象,并返回新创建的对象。这种方法的核心是利用函数封装创建对象的细节,然后通过返回值来...

    javascript如何创建对象

    JavaScript是基于对象的语言,其能够利用面向对象思想来模拟其他如JAVA、C++等面向对象语言。...以上就是在JavaScript中创建对象的几种主要方法。通过这些方法,我们可以根据不同的需求和场景来灵活地创建和使用对象。

    js创建对象几种方式的优缺点对比

    工厂模式是一种创建对象的方式,通过函数来创建具有特定属性和方法的对象。如示例中的`createObj`函数。优点是简单易用,可以隐藏对象的创建过程。缺点是无法确定对象的具体类型,所有创建的对象都属于`Object`类型...

    javascript中创建对象的几种方法总结

    在JavaScript中,有几种常见的创建对象的方法,这里我们将详细探讨这些方法。 1. **对象字面量**:这是最简单且直观的创建对象的方式。通过大括号 `{}` 创建一个空对象,然后通过点`.`或方括号`[]`来添加属性和方法...

    JavaScript创建类/对象的几种方式概述及实例

    以下将详细说明几种常见的对象创建方式及其相关知识点。 ### 一、使用大括号创建对象 JavaScript中对象的定义可以非常简单,直接使用一对大括号`{}`来创建一个对象。这种方式创建的对象是单例,即它仅有一份拷贝。...

    js面向对象之常见创建对象的几种方式(工厂模式、构造函数模式、原型模式)

    在上篇文章给大家介绍了javascript面向对象基础,本篇文章继续深入学习javascript面向对象,JS的语法非常灵活,简单的对象创建就有好几种不同的方法。这些过于灵活的地方有时候确实很让人迷惑,那么今天我们就来梳理...

Global site tag (gtag.js) - Google Analytics