设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2942|回复: 1
打印 上一主题 下一主题

[交流讨论] MV默认脚本基础上的元编程,待续,beta

[复制链接]

Lv1.梦旅人

梦石
0
星屑
1050
在线时间
5 小时
注册时间
2013-11-17
帖子
2
跳转到指定楼层
1
发表于 2015-11-15 13:53:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 宝箱怪 于 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, 根据上下文可能有所不同

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

2
发表于 2015-11-15 14:00:33 | 只看该作者
JAVASCRIPT 代码复制
  1. Function.prototype.superclass = function(){
  2.     return this.prototype.__proto__.constructor;
  3. };

评分

参与人数 1星屑 +66 收起 理由
余烬之中 + 66 简直强行

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-30 06:59

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表