文章目录[隐藏]
// # 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是最后一个字符串类型,他非常特殊:
- 不同的字符串有不同的构造器;
- 字符串可以当做全局变量;
- 字符串可以执行函数;
- 字符串可以执行外部函数;
- 字符串也可以执行自己的操作
我们使用"abc".eval("ecute.log(123)");,运行,发现输出了123。
过程:
- 将"abc"作为全局变量的名,内容为"{__can_do_sth__}"
- 构造,将内容与所有操作绑定起来,包括ecute、process、container、inner、view、pcute、evcter,他们的对象都将赋予给这个全局变量。
- 创建,创建是ecute在class中创建的超越js的一个设计
创建器的名称为eval,他可以将所有的构造运行在一起,形成一个除了external和process就无法访问外部的沙盒。
在上面,我使用ecute.log就可以执行ecute.log命令。
没有回复内容