在javascrip定义类和对象有很多种方法,但是,对于动态原型方法定义的方式,我还是很陌生的.今天看了js高级程序设计才发现,动态原型方法的基本思想与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义.唯一的区别是赋予对象方法的位置.
下面是用动态原型方法来写Car类:
- 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;
- }
-
- }
直到检查typeof Car._initialized 是否等于"undefined" 之前,这个构造函数都未发生变化.这行代码是动态原型方法中最重要的部分.如果这个值未定义,构造函数将用原型方式继续定义对象的方法,然后把Car._initialized设置为true. 如果这个值定义了(它的值为true时, typeof的值为Boolean), 那么就不再创建该方法.简而言之,该方法使用标志来判断是否己给原型赋予了任何方法.该方法只创建并赋值一次,传统的OOP开发者会高兴地发现,这段代码看起来更像其他语言中的类定义了.
呵呵,动态原型方法也是很流行的,在功能上与构造函数/原型方式等价.可以采用这两种方式中的任何一种.不过,需要注意的是,不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题.(具体问题,在开发中自己发现吧^_^)
分享到:
相关推荐
总的来说,JavaScript中的面向对象编程与传统的基于类的OOP有所不同,它通过原型链和构造函数来实现对象的创建和继承。正确理解并运用这些概念,可以让开发者更有效地利用JavaScript进行面向对象的编程。
本文将深入探讨两种常见的定义对象原型的方法:通过`prototype`属性和通过对象字面量。 ### 第一种方法:使用`prototype`属性 ```javascript function Person() { this.username = new Array(); this.password =...
JavaScript定义类的几种方式包括工厂方式、构造函数和原型方式,每种方法都有其特点和适用场景,接下来我们将详细探讨。 工厂方式是最早期的面向对象编程在JavaScript中的实践之一。使用工厂方式定义类,本质上就是...
通过构造函数定义对象的属性,通过原型定义对象的方法。这样,每个对象的属性仍然是唯一的,而方法则可以通过原型链被所有对象共享。混合模式的代码示例如下: ```javascript function Car(color, doors) { this....
举个例子,我们也可以通过Object类实例化的方式来定义对象: ```javascript var oClassA = new Object(); // 实例化Object类创建对象 oClassA.aaa = 'This is a class example!'; // 添加属性aaa oClassA.methodA = ...
当访问一个对象的属性或方法时,如果对象本身没有定义该属性或方法,JavaScript 就会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的末尾(null)为止。 原型链图是用于表示 JavaScript 中对象之间原型...
本文旨在对JavaScript实现基于原型对象的“继承”进行深入分析,并与基于类的继承进行比较。通过对JavaScript的原型继承机制的介绍和实例分析,提出一个改进的“寄生组合模式”,使读者能够更好地理解和应用...
在 JavaScript 中,可以通过多种方式来定义对象及其成员方法。本文将深入探讨如何在 JavaScript 面向对象编程中定义成员方法,并通过具体实例来分析其使用技巧。 #### 二、JavaScript中的构造函数与成员方法 在 ...
在JavaScript中,一切皆为对象,而原型链则是实现对象间属性和方法共享的一种机制。理解原型链对于深入学习JavaScript至关重要。 首先,每个JavaScript对象都有一个内部属性`[[Prototype]]`,通常我们通过`__proto_...
如果在`Person.prototype`上定义了一些属性或方法,比如`name`、`age`和`sayName`: ```javascript Person.prototype = { constructor: Person, name: 'zxs', age: 24, sayName: function() { alert(this.name)...
当访问某个对象中的一个不存在的属性或方法时,会自动调用原型中的属性和方法。也就是说,基于原型创建的对象会自动拥有原型的属性和方法。 之前我们学过构造函数,通过构造函数也可以使两个对象具有相同的属性和...
- **类**:类是一种模板或蓝图,用于创建具有相似特性和行为的对象。 - **对象**:对象是类的实例,具有特定状态和行为。 - **继承**:继承允许一个类继承另一个类的属性和方法,从而支持代码重用。 - **封装**:...
当访问一个对象的属性或方法时,如果在对象本身中找不到,JavaScript引擎会继续在其原型对象中查找,这个过程会一直持续到找到该属性或方法,或者到达原型链的末端(即Object的原型对象)。 工厂模式是一种创建对象...
JavaScript是一种基于原型的对象导向语言,它的对象定义方式具有独特的灵活性。在本文中,我们将深入探讨JavaScript对象的定义、创建方法以及相关的工具和技术。 首先,我们要了解JavaScript对象的本质。对象是由...
首先,我们需要明白在JavaScript中,类是一种语法糖,实际上它是基于原型(prototype)的面向对象编程。ES6引入了`class`关键字,使得代码更加简洁易读,但其底层仍然是基于函数和原型操作。因此,理解函数和原型是...
3. **原型对象**:`prototype`属性是构造函数的一个属性,用于定义实例的公共属性和方法。当尝试访问对象的一个属性时,JavaScript会首先在当前对象中查找,如果找不到,就会沿着原型链向上查找,直到找到为止。 4....
当我们创建一个新的实例时,如果尝试访问该实例上不存在的属性或方法,JavaScript会查找该实例的`__proto__`链,直至找到相应的属性或方法。 在给出的示例中,我们看到如下代码: ```javascript function A() { ...
JavaScript是一种动态类型的脚本语言,虽然它不像Java或C#那样拥有传统的类和实例机制,但它的面向对象编程能力仍然非常强大。JavaScript的核心在于对象、原型和隐式继承,这些都是理解其面向对象特性的重要概念。 ...