首先,我很抱歉,如果這是重複的,但每次我搜索'對象'和'代碼'我有教程頁。Javascript對象獲得代碼作爲字符串
我想知道是否有任何簡單的方法來獲取與對象關聯的代碼。類似於
function A(){
this.name = 'Kaiser Sauze';
}
a = new A();
console.log(a.displayCode());
//OUTPUT
"function A(){ this.name = 'Kaiser Sauze';}"
我希望能夠在瀏覽器中查看代碼,修改代碼並重新加載函數。我想知道,如果有一些方法來做到這一點,或者如果我要灌泵通過做這樣的事情:
function A(){
this.name = 'Kaiser Sauze';
this.code = "function A(){ this.name = 'Kaiser Sauze';}"
}
則每次用戶加載了文本編輯器來查看this.code
我連接onchange更新this.code
。
編輯
原來洋基提出了一個簡單的解決這個
function A(x){
this.x = x ;
}
console.log(A.toString());
//OUTPUT
"function A(x){
this.x = x ;
}"
但在我執行的變量「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*/);"
但是,因爲大多數你已經知道,所有得到的輸出都是類似「Object」的東西。我幾乎找到解決的辦法,通過將初始化函數中,像這樣
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*/);
}"
但這是混亂的,然後我不得不去,並開始解析,我不想做字符串。
編輯:我問這一切的原因是B/C我想要使代碼是動態可執行和高度模塊化。我正在處理畫布。我希望用戶能夠點擊例如矩形,查看其代碼,然後修改並加載/執行它。我有一系列的規則,但基本上我有一個形狀類,所有定義該形狀(顏色,透明度,填充,筆畫...)的東西必須作爲參數傳遞給對象構造函數,如下所示:
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);
}
});
這種方式代碼是自動模塊化的,我不必擔心在頁面頂部定義的顏色,然後在頁面中間定義高度,依此類推。現在我唯一需要的是以某種方式傳遞初始化的整個上面的字符串表示形式的參數。我可以把它包裝在一個函數中,並在其上調用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()
});
}
但是接下來有兩個問題。 1)我必須手動刪除function wrapper()
和尾隨}
以及將每行向左移動一個選項卡。 2)不能保證用戶會記得包裝包裝功能,因爲它對繪圖而言是完全不必要的。我正在想辦法讓包裝看起來很自然,但我想不出任何。但是,我再一次沒有睡過三十個小時。
+1僅供參考Kaiser Sauze ...雖然我認爲這是拼寫KeyserSöze;-) –
@Jason:我永遠不會記得如何拼寫它,所以當我把我的號碼給女士們時,我會去Rolo Tomasi ;-) – puk