Project1
标题: MV默认脚本基础上的元编程,待续,beta [打印本页]
作者: 宝箱怪 时间: 2015-11-15 13:53
标题: MV默认脚本基础上的元编程,待续,beta
本帖最后由 宝箱怪 于 2015-11-15 15:40 编辑
约定MV对象的所处的类按js惯例用构造函数:
那么一个类的超类用:
参考2楼tentaroxd的做法,楼主做法已折叠
祖先:
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());
return this._ancestors
}
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());
return this._ancestors
}
instance_eval
普通情况下,用bind或者call,apply之类的就行了,比如
Object.prototype.instance_eval = function(f) {return f.bind(this)() }
Object.prototype.instance_eval = function(f) {return f.bind(this)() }
但是对于下面的情形行不通,或者说词法范围不一样:
当函数是一个es6的lambda时,this将绑定到外部的this,因此下面会有不一样的行为:
(3).instance_eval(function(){return this * 2})//6
(3).instance_eval(() => this * 2)//NaN, 根据上下文可能有所不同
(3).instance_eval(function(){return this * 2})//6
(3).instance_eval(() => this * 2)//NaN, 根据上下文可能有所不同
作者: taroxd 时间: 2015-11-15 14:00
Function.prototype.superclass = function(){
return this.prototype.__proto__.constructor;
};
Function.prototype.superclass = function(){
return this.prototype.__proto__.constructor;
};
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |