约定MV对象的所处的类按js惯例用构造函数: 
JAVASCRIPT 代码 
那么一个类的超类用:
 
参考2楼tentaroxd的做法,楼主做法已折叠
 
祖先: 
JAVASCRIPT 代码 - Object.prototype.ancestors = function(){
 - if(this.prototype.__proto__ === null || this.prototype.__proto__.constructor == this)return[this];
 - if(this._ancestors == null)this._ancestors = [this].concat(this.prototype.__proto__.constructor.ancestors());
 - returnthis._ancestors
 - }
 
  复制代码 
instance_eval 
普通情况下,用bind或者call,apply之类的就行了,比如 
JAVASCRIPT 代码 - Object.prototype.instance_eval = function(f){return f.bind(this)()}
 
  复制代码
但是对于下面的情形行不通,或者说词法范围不一样: 
当函数是一个es6的lambda时,this将绑定到外部的this,因此下面会有不一样的行为: 
JAVASCRIPT 代码 - (3).instance_eval(function(){returnthis * 2})//6
 - (3).instance_eval(() => this * 2)//NaN, 根据上下文可能有所不同
 
  复制代码 
             本帖来自P1论坛作者宝箱怪,因Project1站服务器在国外有时候访问缓慢不方便作者交流学习,经联系P1站长fux2同意署名转载一起分享游戏制作经验,共同为国内独立游戏作者共同创造良好交流环境,原文地址: https://rpg.blue/forum.php?mod=viewthread&tid=385640  若有侵权,发帖作者可联系底部站长QQ在线咨询功能删除,谢谢。  |