浅说javascript中的原型链

        浅尝原型链
        ECMAScript中的对象是一个无序属性的集合,其属性可以包含基本值、对象或者函数,它拥有一个prototype对象。
        一个对象的prototype是以内部的[[Prototype]]属性来引用的。对于prototype对象来说,我们使用__proto__(firefox,chrome)来表示。
       原型对象也是简单的对象并且可以拥有它们自己的原型。如果一个对象的原型是一个非null的引用,那么以此类推,这就是原型链。
       原型链窥视
       我们来看一个例子,看一个普通对象的整个原型链的结构。
var mike = {
 sex:"male",
 location:"beijing"
}
console.log(mike);
      下图是在chrome浏览器里的变量原型链结构:


 
      原型链结构图:



 
    分析:
     根据上图,我们可以看到定义的mike对象有两个自身属性sex和location,mike这个对象有个[[Prototype]]属性__proto__,指向了【Object的prototype对象】,该对象没有了内置的[[Prototype]]属性,它自带一个constructor属性,该属性指向【Object构造函数】,在【Object构造函数】中有prototype属性,该属性指回了【Object的prototype对象】,【Object构造函数】中有个__proto__属性指向了【Function的prototype对象】,该对象的constructor指向了【Function构造函数】,而其内的__proto__对象指向了【Object的prototype对象】,在【Function构造函数】中的prototype对象指回了【Function的prototype对象】,__proto__对象指向了【Object的prototype对象】。
      以上例子我们可以看到一个普通对象的整个原型链情况,那么原型链到底干嘛用的呢?
    原型链用处
    原型链是一个指针,指向一个对象,它的用途是包含可以由特定类型的所有实例共享的属性和方法。它的好处就是让所有对象实例共享它包含的属性和方法。
   共享属性和方法
function Person(){

}
Person.prototype.name='mike';
Person.prototype.location='beijing';
Person.prototype.sayHello=function(){
 console.log('Hello');
};

var mike = new Person();
console.log(mike);
var zeromike=new Person();
console.log(zeromike);
 

 
     我们可以看到在mike和zeromike两个对象中具有相同的属性和方法,这也是原型链最基本的用法。
     继承
     在ECMAScript中实现继承主要是依靠原型链来实现的。
     我们回顾一下构造函数,原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的内部指针。如果让原型对象等于另一个类型的实例,此时的原型对象将包含一个指向另一个原型的指针。相应地,另一个原型中也包含着一个指向另一个构造函数的指针。如果另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。这是原型链的基本概念。我们就依靠这个概念来实现继承。
function SuperType(){
 this.property=true;
}
SuperType.prototype.getSuperValue = function(){
 return this.property;
}
function SubType(){
 this.subproperty=false;
}
SubType.prototype=new SuperType();
SubType.prototype.getSubValue=function(){
 return this.subproperty;
}
var instance = new SubType();
console.log(instance.subproperty);
   

   
       以上代码定义了两个类型:SuperType和SubType。每个类型分别有一个属性和一个方法。它们的主要区别是SubType继承了SuperType。而继承是通过创建SuperType的实例,并将该实例赋给SubType.prototype实现的。实现的本质是重写原型对象,代之以一个新类型的实例。换句话说,原来存在于SuperType的实例中的所有属性和方法,现在也存在于SubType.prototype中了。在确立了继承关系后,给SubType.prototype添加一个方法,这样就在继承了SuperType的属性和方法的基础上又添加了一个新方法。这个例子中的实例及构造函数和原型之间的关系如图:

       在上面的代码中,我们没有使用SubType默认提供的原型,而是给它换了新原型:这个新原型就是SuperType的实例。于是,新原型不仅具有作为一个SuperType的实例所拥有的全部属性和方法,而且其内部还有一个指针,指向了SuperType的原型。getSuperValue()方法仍然还在SuperType.prototype中,但property则位于SubType.prototype中。这是因为property是一个实例属性,而getSuperValue()则是一个原型方法。既然SubType.prototype现在是SuperType的实例,那么property当然就位于该实例中了。此外,要注意instance.constructor现在指向的是SuperType,这是因为原来SubType.prototype中的constructor被重写了的缘故。实际上,不是SubType的原型的constructor属性被重写了,而是SubType的原型指向了另一个对象SuperType的原型,而这个原型对象的constructor属性指向的是SuperType.
ITEYE的编辑器是我见过的最差的编辑器了。。。。
 
### 先进过程控制(APC)的基本概念 先进过程控制(Advanced Process Control, APC)是一种基于模型的过程控制方法,旨在提高复杂工业系统的性能效率。它通常用于处理具有强耦合、大滞后或多变量特性的动态系统[^1]。相比于传统的PID控制器,APC能够更好地应对复杂的工艺条件并优化整体操作。 APC的核心目标在于利用预测性自适应特性来减少波动、改善稳定性最大化产量的同时降低能耗成本。其基本组成包括但不限于多变量预估控制器(MPC),以及状态估计器等组件[^3]。 ### 工业自动化中的应用实例 #### 1. **石油炼化领域** 在石油化工行业中,APC广泛应用于蒸馏塔的操作优化中。通过实时调整温度、压力等多个参数,可以显著提升产品收率并维持质量标准一致。例如,在催化裂化装置(CCU)里实施MPC策略能有效平衡轻油产出比例与重质残渣处理能力之间的关系。 ```python import numpy as np from scipy.optimize import minimize def apc_optimization(params): # 定义目标函数 (简化版) yield_rate = params[0]*params[1] - params[2]**2 return -yield_rate # 寻找最大值需返回负数形式 initial_guess = [1.0, 1.0, 1.0] result = minimize(apc_optimization, initial_guess) print(f"Optimal parameters: {result.x}") ``` 此代码片段展示了一个简单的模拟案例,其中`apc_optimization`代表某种化学反应过程中影响产物得率的关键因素组合方式之一。 #### 2. **化工生产流程** 对于涉及多个串联或并联单元操作的大型化工厂来说,采用APC可以帮助协调各阶段间的物料流动速率匹配问题,从而避免瓶颈效应的发生。比如聚乙烯聚合反应釜群之间切换时序安排就需要依赖精准的时间序列规划算法支持才能达到最佳经济效益社会效益双重目的[^3]。 #### 3. **钢铁冶金加工环节** 现代轧钢生产线普遍装备有高度集成化的计算机控制系统,其中包括了针对厚度尺寸精确调控方面的高级功能模块——即所谓的“张力平坦度联合闭环反馈机制”。这种特殊类型的APC方案不仅考虑到了当前时刻的实际测量偏差情况,还会前瞻性地考虑到未来可能产生的趋势变化方向及其幅度大小等因素综合考量之后再做出最终决定如何动作执行机构完成相应修正作业[^2]。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值