首页 理论教育JavaScript入门:修改原型

JavaScript入门:修改原型

【摘要】:比如,将小汽车的最大挡位从5改为3,或者将小汽车的原型从机动车改为非机动车;虽然与实际行为不符,但是在JavaScript中允许替换构造函数的整个prototype属性。图12.3.2修改原型,调整小汽车最大速度2.替换整个原型替换整个原型有两种方式:为构造函数的prototype属性设置新的值;使用Object.setPrototypeOf函数修改对象的原型。动手写12.3.3执行12.3.3.html,输出结果到网页,如下图所示。

修改原型包括两种操作:修改原型的部分属性或函数和替换整个原型。比如,将小汽车的最大挡位从5改为3,或者将小汽车的原型从机动车改为非机动车;虽然与实际行为不符,但是在JavaScript中允许替换构造函数的整个prototype属性。

1.修改原型属性

修改原型的属性和方法与修改普通对象一样,直接为原型的属性赋值即可。

12.3.2.html修改小汽车原型的最大速度,将所有小汽车对象的最大速度设置从200公里每小时改为160公里每小时,如下所示。

动手写12.3.2

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

图12.3.2 修改原型,调整小汽车最大速度

2.替换整个原型

替换整个原型有两种方式:

(1)为构造函数的prototype属性设置新的值;

(2)使用Object.setPrototypeOf(instance,prototype)函数修改对象的原型。(www.chuimin.cn)

这两种方式的效果不同:替换构造函数的prototype属性,只能影响新创建的对象实例,修改之前所创建的对象的原型仍然是旧的原型;Object.setPrototypeOf(instance,prototype)函数只能修改当前参数的原型,不影响构造函数的prototype属性。

12.3.3.html为构造函数设置新的prototype,如下所示。

动手写12.3.3

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

图12.3.3 替换整个prototype属性

设置新的prototype属性之后,使用该构造函数新创建的对象的原型全部改为新的原型,但是之前所创建的对象的原型不会改变。

Object.setPrototypeOf(instance, prototype)主要用于修改当前对象的原型,不会修改对象构造函数的prototype属性。

提示

直接修改对象的__proto__属性也可以达到与使用Object.setPrototypeOf()函数一样的效果,但是修改这类具有特殊含义的__proto__属性不符合代码规范,建议使用更规范的Object.setPrototypeOf()函数。