繁体   English   中英

为什么已经生成的对象使用“ new”操作可以访问原型方法,该方法稍后会在javascript中添加

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM