每一个构造函数都有一个属性叫做原型(prototype,下面都不再翻译,使用其原文)。这个属性非常有用:为一个特定类声明通用的变量或者函数。
prototype的定义
你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。你可以看看下面的例子:
Example PT1
CODE:
function Test()
{
}
alert(Test.prototype); // 输出 "Object"
给prototype添加属性
就如你在上面所看到的,prototype是一个对象,因此,你能够给它添加属性。你添加给prototype的属性将会成为使用这个构造函数创建的对象的通用属性。
例如,我下面有一个数据类型Fish,我想让所有的鱼都有这些属性:livesIn="water"和price=20;为了实现这个,我可以给构造函数Fish的prototype添加那些属性。
Example PT2
CODE:
function Fish(name, color)
{
this.name=name;
this.color=color;
}
Fish.prototype.livesIn="water";
Fish.prototype.price=20;
接下来让我们作几条鱼:
CODE:
var fish1=new Fish("mackarel", "gray");
var fish2=new Fish("goldfish", "orange");
var fish3=new Fish("salmon", "white");
再来看看鱼都有哪些属性:
CODE:
for (int i=1; i<=3; i++)
{
var fish=eval_r("fish"+i); // 我只是取得指向这条鱼的指针
alert(fish.name+","+fish.color+","+fish.livesIn+","+fish.price);
}
输出应该是:
CODE:
"mackarel, gray, water, 20"
"goldfish, orange, water, 20"
"salmon, white water, 20"
你看到所有的鱼都有属性livesIn和price,我们甚至都没有为每一条不同的鱼特别声明这些属性。这时因为当一个对象被创建时,这个构造函数 将会把它的属性prototype赋给新对象的内部属性__proto__。这个__proto__被这个对象用来查找它的属性。
你也可以通过prototype来给所有对象添加共用的函数。这有一个好处:你不需要每次在构造一个对象的时候创建并初始化这个函数。为了解释这一点,让我们重新来看Example DT9并使用prototype来重写它:
用prototype给对象添加函数
Example PT3
CODE:
function Employee(name, salary)
{
this.name=name;
this.salary=salary;
}
Employee.prototype.getSalary=function getSalaryFunction()
{
return this.salary;
}
Employee.prototype.addSalary=function addSalaryFunction(addition)
{
this.salary=this.salary+addition;
}
我们可以象通常那样创建对象:
CODE:
var boss1=new Employee("Joan", 200000);
var boss2=new Employee("Kim", 100000);
var boss3=new Employee("Sam", 150000);
并验证它:
CODE:
alert(boss1.getSalary()); // 输出 200000
alert(boss2.getSalary()); // 输出 100000
alert(boss3.getSalary()); // 输出 150000
这里有一个图示来说明prototype是如何工作的。这个对象的每一个实例(boss1, boss2, boss3)都有一个内部属性叫做__proto__,这个属性指向了它的构造器(Employee)的属性prototype。当你执行 getSalary或者addSalary的时候,这个对象会在它的__proto__找到并执行这个代码。注意这点:这里并没有代码的复制(和 Example DT8的图表作一下对比)。
相关推荐
你不需要显式地声明一个prototype属性,因为在每一个构造函数中都有它的存在。你可以看看下面的例子: Example PT1 代码如下:function Test(){}alert(Test.prototype); // 输出 “Object” 给prototype添加...
在JavaScript中,遍历属性、理解`prototype`和掌握...总结,遍历JavaScript对象的属性有多种方法,而`prototype`和继承机制是实现面向对象编程的关键。理解并熟练运用这些概念,将有助于编写更高效、更可维护的代码。
JavaScript中通过prototype属性共享属性和方法是一种面向对象编程中的常用技巧。它可以帮助我们实现代码的复用,并且让创建的每个实例都具有相同的属性和方法,提高代码的效率和维护性。 在JavaScript中,每一个...
### String对象常用的属性与方法 在JavaScript中,`String`对象是用于表示和操作文本的强大工具。它提供了许多内置的方法来帮助我们处理字符串数据。本文将详细介绍`String`对象的一些常用属性和方法,并通过示例...
### JavaScript编程常用函数属性及方法详解 #### 一、引言 JavaScript 是一种广泛应用于网页开发的脚本语言,能够实现动态效果、交互性以及数据处理等功能。掌握JavaScript中的核心对象及其属性和方法,对于提高...
`__proto__`指向原型对象,`Object.prototype`是所有对象的根原型,`prototype`属性常用于定义构造函数的原型方法。 9. **闭包和作用域**:闭包是JavaScript中一种强大的特性,它可以访问并操作外部函数的变量。...
本文将深入探讨四种常用的方法来识别和判断JavaScript中的数据类型:`typeof`、`instanceof`、`constructor`以及`prototype`。 ### 1. `typeof` `typeof`操作符是最常见的类型检测方式之一,它返回一个表示未经计算...
**JavaScript中常用的属性与方法** JavaScript提供了丰富的内置属性和方法,如: - `this`关键字:根据上下文引用当前对象。 - `prototype`:用于扩展对象的属性和方法。 - `Object.keys()`:返回对象的所有可枚举...
`$()`函数是Prototype中非常常用的一个函数,它实际上是对`document.getElementById()`方法的一个封装。该函数用于获取具有特定ID的DOM元素。与原生JavaScript相比,使用`$()`函数获取DOM元素更为方便。 **示例代码...
### JS常用方法知识点详解 #### 一、String.prototype.Replace 方法 **定义与功能:** `String.prototype.Replace` 是一个自定义扩展方法,用于全局替换字符串中的某个子串。该方法接受两个参数:`oldValue` 和 `...
2. **空间定位的常用函数**:Prototype.js提供了一系列方法,如`Element.extend`、`$(selector)`等,用于查找和操作DOM元素。这些函数极大地简化了页面元素的选择和操作,例如根据ID、类名或CSS选择器查找元素。 3....
在JavaScript编程中,原型(prototype)是一个非常重要的概念,它允许我们为对象定义共享的属性和方法。通过原型定义方法,可以带来一些明显的好处,主要体现在内存管理和代码组织上。 首先,原型为JavaScript中的...
接下来,我们将深入探讨如何通过`prototype`属性来实现继承,并解释所给定的“JavaScript中关于prototype属性实现继承的原理图”。 ### 了解JavaScript中的原型链 在JavaScript中,每个函数都有一个`prototype`...
本资源“javascript常用验证 常用操作方法(工具方法)”可能包含了一个名为`comm.js`的文件,这通常是一个通用的JavaScript工具库,封装了多种常见的验证和操作功能。下面将详细介绍JavaScript中的验证和操作方法。 ...
### JavaScript内置对象属性及方法详解 #### 一、概述 在JavaScript编程语言中,内置对象是预先定义的对象,包括它们的属性和方法。这些对象能够帮助开发者高效地完成各种任务,尤其是在Web端开发中,它们提供了...
JavaScript,简称JS,是一种广泛应用于Web开发的轻量级脚本语言。它的对象系统是其核心特性之一,提供了丰富的内置对象以及自定义对象的能力。在这个总结中,我们将深入探讨JavaScript中的常见对象及其重要属性和...
它还实现了基于原型的继承机制,允许对象继承其他对象的属性和方法,增强了JavaScript的面向对象能力。 3. **DOM操作**:Prototype提供了便捷的DOM(文档对象模型)操作接口,如`Element`和`$$`选择器,可以更简单...