加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 宝箱怪 于 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, 根据上下文可能有所不同
|