首页 理论教育JavaScriptprototype属性详解

JavaScriptprototype属性详解

【摘要】:构造函数初始化对象的值之后,将自身的prototype属性设置赋值给对象的__proto__属性,让对象能够通过__proto__访问对应原型上的属性和方法。图12.2.2使用原型继承属性和方法因为使用Rect.prototype = new Shape()修改了Rect的原型对象,使Rect的实例具有Shape的属性和方法,紧接着使用Rect.prototype.constructor = Rect是为了修正Rect实例的构造函数。JavaScript在ECMAScript 6之前没有提供这种语法结构,而是以上述示例中的形式修改构造函数的prototype属性来实现继承关系。

1.原型对象

所有类型的数据都通过对应的构造函数(constructor)创建。构造函数是数据的初始化方法,比如数值的构造函数是Number、字符串的构造函数是String、数组的构造函数是Array。构造函数初始化对象的值之后,将自身的prototype属性设置赋值给对象的__proto__属性,让对象能够通过__proto__访问对应原型上的属性和方法。

提示

这里的对象包括全部类型的有值数据,比如布尔值、数字、字符串、数组、函数、对象,不仅仅是使用typeof操作符得到返回值为object的数据,有时候也会以一切皆对象来代表这些数据。

12.2.1.html查看构造函数的prototype属性,如下所示。

动手写12.2.1

执行12.2.1.html,输出结果到网页,如下图所示。

图12.2.1 原型对象prototype

2.原型继承

在JavaScript中每声明一个函数,就会创建一个原型对象。修改构造函数的原型属性,就可以在两个原型之间实现继承关系。(www.chuimin.cn)

12.2.2.html修改构造函数的prototype属性实现原型继承,如下所示。

动手写12.2.2

执行12.2.2.html,输出结果到网页,如下图所示。

图12.2.2 使用原型继承属性和方法

因为使用Rect.prototype = new Shape()修改了Rect的原型对象,使Rect的实例具有Shape的属性和方法,紧接着使用Rect.prototype.constructor = Rect是为了修正Rect实例的构造函数。虽然不修正也不会造成明显的负面影响,但修正之后更加自然。

提示

面向对象编程语言Java使用关键字extends实现类继承,有明确的语法结构,形如class A extends B。JavaScript在ECMAScript 6之前没有提供这种语法结构,而是以上述示例中的形式修改构造函数的prototype属性来实现继承关系。