javascript-理解原型

本文深入解析JavaScript中的原型概念,包括构造器原型、实例原型及其应用,以及`instanceof`运算符的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1、prototype 与 [[Prototype]] 

原型 (prototype) 这个词通常表示着两个概念。首先,构造器具有一个公用的prototype属性。

当构造器被用来创建新的对象时,新建对象会有一个[[Prototype]]属性用来作为创建它的构造器的prototype属性的引用。

其次,构造器又具有一个内部的[[Prototype]]属性,用来作为其构造器的prototype属性的引用,

再通常情况加引用了Function.prototype属性。总之,所有的Javascript对象都具有一个内部的[[Prototype]]属性,

而且仅当该对象时函数对象时,它同时还具有prototype属性。


首先使用new 创建对象


function Circle(radius) {
    this.radius = radius;
}

var circ = new Circle(6);
var circ2 = {radius: 6};



按照上面原型的概念:

既 Circle 内部的[[Prototype]] 引用了 Object.prototype

circ内部的[[Prototype]] 引用了 Circle.prototype

circ2是直接继承(亦即,它的[[Prototype]]属性就是Object.prototype的引用)



2、  构造器原型

函数总是被分配一个prototype属性,而此函数作为构造器创建的所有对象内部的[[Prototype]]属性都被设置为该属性。

而这个函数所分配的原型对象的原型就是Object.prototype,另外,它还定义了一个constructor属性,

该属性是构造器本身的引用。new操作符可以被用在任何表达式中,并生成一个构造器,

这时我们就可以使用这个属性动态地创建与已知对象同类型的对象。

var circ = new Circle(6);
Circle.prototype.diameter = function() {
    return this.radius * 2;
}
alert(circ.diameter()); // 12
alert(Circle,circle.constructor);  // true


这里为 Circle.prototype 添加了 diameter  方法 并测试通过。有一部分人习惯用下面的方法来添加函数

Circle.prototype = {
    diameter: function() {
        return this.radius * 2;
    }
}
var circ = new Circle(6);  //声明变量如果放在 prototype被赋值的前面会导致circ.diameter未声明
alert(circ.diameter()); // 12
alert(Circle,circle.constructor);  // false


当我们为Circle.prototype赋以新值时,javascript将不再为该对象创建constructor

属性。这就表示对constructor属性的[[Get]] 会引发解释器沿着原型链查找,直至找到相应的值。

再我们的构造器中,constructor属性查找的结果是将Object.prototype,而后者的constructor属性值是Object

解决方法就是手动为constructor属性赋值

Circle.prototype = {
    constructor: Circle,
    diameter: function() {
            return this.radius * 2;
    }
}



3、   instanceof 

a 的内部属性[[Prototype]]或者它的原型链上的任一对象与 b.prototype 是同一对象,那么表达式 a instanceof b 就将返回true。


alert(circ instanceof Object );
alert(circ instanceof Circle);
alert(circ2 instanceof Object);




内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值