[英]why a object that already generated use 'new' operate can access a prototype's method which added later in javascript
代码如下:
function Building(b_height,b_address,b_cost){
this.b_address = b_address;
this.b_cost = b_cost;
}
Building.prototype = {
constructor:Building,
}
var house = new Building("No.211 Spring Street",5000);
//add a new method to Building.prototype
Building.prototype.raise= function(){this.b_cost = this.b_cost + 1000;}
//why a object that already generated use 'new' operate can access a prototype's method which added later
house.raise();
house.b_cost ; //6000
我不明白为什么“房屋”对象可以访问“提高”方法。
根据MDN介绍NEW运算符:
当执行代码new foo(...)时,将发生以下情况:
(1)创建一个新对象,该对象继承自foo.prototype。
(2)使用指定的参数调用构造函数foo,并将其绑定到新创建的对象。 new foo等效于new foo(),即,如果未指定参数列表,则调用不带参数的foo。
(3)构造函数返回的对象成为整个新表达式的结果。 如果构造函数未明确返回对象,则使用在步骤1中创建的对象。 (通常,构造函数不返回值,但是如果他们想覆盖常规的对象创建过程,则可以选择这样做。)
那么,“ house”作为一个新对象仅继承自Building.prototype,为什么可以访问“ new”原型方法?
当对象继承原型时,它不会获得原型的副本,而是会获得对原型的引用。
创建对象实例之后,您仍然可以更改其原型,因为所有相同类型的对象只有一个原型对象。
JS是一种动态语言,如果您可以访问原型,则可以使用新方法对其进行扩充,从那时起,只要有原型访问权限的人都可以使用。
在JS中,继承是基于对象的,而不是例如C#中基于类的。 因此,它更像是合成而不是继承。 由于您可以访问原型,因此可以获取原型的实例以及当时的实例和方法。
我希望我表现得很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.