Project1

标题: MV默认脚本基础上的元编程,待续,beta [打印本页]

作者: 宝箱怪    时间: 2015-11-15 13:53
标题: MV默认脚本基础上的元编程,待续,beta
本帖最后由 宝箱怪 于 2015-11-15 15:40 编辑

约定MV对象的所处的类按js惯例用构造函数:
JAVASCRIPT 代码复制
  1. this.constructor

那么一个类的超类用:

参考2楼tentaroxd的做法,楼主做法已折叠



祖先:
JAVASCRIPT 代码复制
  1. Object.prototype.ancestors = function(){
  2. if(this.prototype.__proto__ === null || this.prototype.__proto__.constructor == this) return [this];
  3. if(this._ancestors == null) this._ancestors = [this].concat(this.prototype.__proto__.constructor.ancestors());
  4. return this._ancestors
  5. }


instance_eval
普通情况下,用bind或者call,apply之类的就行了,比如
JAVASCRIPT 代码复制
  1. Object.prototype.instance_eval = function(f) {return f.bind(this)() }

但是对于下面的情形行不通,或者说词法范围不一样:
当函数是一个es6的lambda时,this将绑定到外部的this,因此下面会有不一样的行为:
JAVASCRIPT 代码复制
  1. (3).instance_eval(function(){return this * 2})//6
  2.  
  3. (3).instance_eval(() => this * 2)//NaN, 根据上下文可能有所不同


作者: taroxd    时间: 2015-11-15 14:00
JAVASCRIPT 代码复制
  1. Function.prototype.superclass = function(){
  2.     return this.prototype.__proto__.constructor;
  3. };





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1