约定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在线咨询功能删除,谢谢。 |