puk*_*puk 13 javascript object tostring
首先,我很抱歉,如果这是重复,但每次我搜索'对象'和'代码'我得到教程页面.
我想知道是否有任何简单的方法来获取与对象关联的代码.就像是
function A(){
this.name = 'Kaiser Sauze';
}
a = new A();
console.log(a.displayCode());
//OUTPUT
"function A(){ this.name = 'Kaiser Sauze';}"
Run Code Online (Sandbox Code Playgroud)
我希望能够在浏览器中查看代码,修改代码并重新加载函数.我想知道是否有某种方法可以做到这一点,或者我是否必须通过这样做来填充泵:
function A(){
this.name = 'Kaiser Sauze';
this.code = "function A(){ this.name = 'Kaiser Sauze';}"
}
Run Code Online (Sandbox Code Playgroud)
然后每次用户加载文本编辑器以查看this.code
我连接onchange以进行更新this.code
.
编辑
结果是洋基提出了一个简单的解决方案
function A(x){
this.x = x ;
}
console.log(A.toString());
//OUTPUT
"function A(x){
this.x = x ;
}"
Run Code Online (Sandbox Code Playgroud)
但在我的实现中,变量'x'可以是一个函数(实际上是一个带有变量,函数和子对象的复杂对象,我通过调用dojo.mixin混合),所以我真正想要的是在实例化时知道代码,像这样的事情
function A(x){
this.x = x ;
}
var a = new A(function(){/*DO SOMETHING*/);
console.log(a.toString());
//OUTPUT
"var a = new A(function(){/*DO SOMETHING*/);"
Run Code Online (Sandbox Code Playgroud)
但是,正如大多数人已经知道的那样,所有输出都是"对象".通过将初始化放在这样的函数中,我几乎找到了解决这个问题的方法
function A(x){
this.x = x ;
}
function _A(){
var a = new A(function(){/*DO SOMETHING*/);
}
console.log(_A.toString());
//OUTPUT
"function _A(){
var a = new A(function(){/*DO SOMETHING*/);
}"
Run Code Online (Sandbox Code Playgroud)
但这很令人困惑,然后我必须进入并开始解析我不想做的字符串.
编辑:我问所有这一切的原因是b/c我想制作既动态可执行又高度模块化的代码.我正在处理画布.我希望用户能够单击例如矩形,查看其代码,然后修改然后加载/执行它.我有一系列规则,但基本上我有一个形状类,定义该形状的一切(颜色,透明度,填充,笔画......)必须作为参数传递给对象cosntructor,如:
rect = new Shape({color : 'rgba(0,0,0,1)' ,
x : 0 ,
y : 0 ,
w : 100 ,
h : 100 ,
draw : function() {ctx.fillStyle = this.color;
ctx.fillRect(this.x,this.y,this.w,this.h);
}
});
Run Code Online (Sandbox Code Playgroud)
这样代码是自动模块化的,我不必担心在页面顶部定义颜色,然后将高度定义在页面的一半,依此类推.现在我唯一需要的是以某种方式,作为参数传递,整个上面的字符串表示初始化.我可以将它包装在一个函数中并在其上调用toString,就像这样
function wrapper(){
rect = new Shape({color : 'rgba(0,0,0,1)' ,
x : 0 ,
y : 0 ,
w : 100 ,
h : 100 ,
draw : function() {ctx.fillStyle = this.color;
ctx.fillRect(this.x,this.y,this.w,this.h);
},
code : wrapper.toString()
});
}
Run Code Online (Sandbox Code Playgroud)
但后来有两个问题.1)我必须手动删除function wrapper()
和拖尾}
,并通过一个选项卡向左移动每一行.2)不保证用户会记得包含包装函数,因为它对于绘图来说是完全不必要的.我试图想一个包装器看似自然的方式,但我想不出任何方法.但是我再也没有睡过30多个小时.
yan*_*kee 19
好的......再次回顾......我认为这就是你想要的;-).
>>> function A() {this.name ="foo";}
undefined
>>> A.toString()
"function A() {this.name ="foo";}"
Run Code Online (Sandbox Code Playgroud)
我不敢相信没有人提出这个建议(如果这个答案介于两者之间,我深表歉意)。我没有想到这一点,因为在开发时,我所有的工作都是客户端。我真正要做的就是使用 Ajax 作为 javascript 加载代码一次。加载并创建对象后,我再次将其作为字符串加载并将其分配给对象中的变量。
归档时间: |
|
查看次数: |
20577 次 |
最近记录: |