ecute中神奇的string-前端板块造梦空间论坛-技术交流-造梦空间论坛

ecute中神奇的string

// # use ecute
ecute.printLine(ecute.typeof("my-string")); //正常的typeof
ecute.printLine(ecute.self.prototype.typeof("my-string")); //后台的typeof

在上面的代码中,我们使用ecute.typeof("my-string"),就相当于js的typeof "my-string",返回“string”。而另一个返回“StringE6Object”

ecute中,有两个主要的属性,有prototype(protype,__system_init_proto__)和self两大对象。prototype代表的是运行层面的,大约和JavaScript相等,self是指编译层面的,是程序在编译时,会把代码看做什么。在self中的prototype,就是所有的运行库,他的名字是prototype,不是真正的prototype(真正的在__running_init_system_confE1__,无法访问)。

在这个对象中,我们就可以访问到在编译器,他到底把这个东西当做什么。

通过typeof("my-string"),我们发现他是StringE6Object。这和正常的string不太一样啊。到底是什么意思?

StringEnObject

“String”的意思是字符串,“E”代表操作集,其中的n就是数字,指示哪个操作集,“Object”是对象的意思。

StringE1Object和StringE2Object

StringE1Object是指ecute的system层面,我们通过StringE1Object.prototype访问他的构造器,发现构造器里只有this.system = "{__system__}",其他的什么都没有。这是因为他只存在于运行层面,我们无法访问也无法修改。

StringE2Object是指ecute的程序层面,我们通过StringE2Object.prototype访问他的构造器,构造器里的代码:

this.system = ecute.that["{__external__}|{__system__}"]

this.running = ecute.initThat();

当我们访问ecute.initThat()时,结果返回:0021 and 0022,意思是权限不足和类型错误。按照官方文档的说法,应该是不可读不可写。

E3和E4

E3和E4本质上是一个东西

StringE3Object是正常的String,他即可以通过StringE3Object.prototype访问构造器,也可以通过StringE4Object.likeArray.prototype访问构造器,因为字符串也可以执行length,indexOf等操作,与array有一定的关联度,为了让字符串在array下运行,发明者发明了StringE4Object.likeArray

E5

StringE5Object是数字字符串,他保存的字符串中,全部都是数字,可以进行数学运算(无法直接加,否则会被当做正在的string。

E6

StringE6Object是最后一个字符串类型,他非常特殊:

  1. 不同的字符串有不同的构造器;
  2. 字符串可以当做全局变量;
  3. 字符串可以执行函数;
  4. 字符串可以执行外部函数;
  5. 字符串也可以执行自己的操作

 

我们使用"abc".eval("ecute.log(123)");,运行,发现输出了123。

过程:

  1. 将"abc"作为全局变量的名,内容为"{__can_do_sth__}"
  2. 构造,将内容与所有操作绑定起来,包括ecute、process、container、inner、view、pcute、evcter,他们的对象都将赋予给这个全局变量。
  3. 创建,创建是ecute在class中创建的超越js的一个设计

创建器的名称为eval,他可以将所有的构造运行在一起,形成一个除了external和process就无法访问外部的沙盒。

在上面,我使用ecute.log就可以执行ecute.log命令。

请登录后发表评论

    没有回复内容

© 造梦空间论坛