Trước hết, tôi xin lỗi nếu đây là một bản sao, nhưng mỗi lần tôi googled cho 'đối tượng' và 'mã' tôi có các trang hướng dẫn.Đối tượng Javascript nhận được mã như chuỗi
Tôi muốn biết liệu có cách nào dễ dàng để lấy mã được liên kết với một đối tượng hay không. Một cái gì đó như
function A(){
this.name = 'Kaiser Sauze';
}
a = new A();
console.log(a.displayCode());
//OUTPUT
"function A(){ this.name = 'Kaiser Sauze';}"
Tôi muốn có thể xem mã, sửa đổi và tải lại chức năng, tất cả từ bên trong trình duyệt. Tôi muốn biết nếu có một số cách để làm điều này, hoặc nếu tôi phải thủ bơm bằng cách làm một cái gì đó như thế này:
function A(){
this.name = 'Kaiser Sauze';
this.code = "function A(){ this.name = 'Kaiser Sauze';}"
}
sau đó mỗi khi tải sử dụng lên soạn thảo văn bản để xem this.code
tôi kết nối thay đổi để cập nhật this.code
.
EDIT
quay ra yankee đề nghị một giải pháp đơn giản để này
function A(x){
this.x = x ;
}
console.log(A.toString());
//OUTPUT
"function A(x){
this.x = x ;
}"
nhưng trong việc thực hiện của tôi biến 'x' có thể là một chức năng (thực sự là một đối tượng phức tạp với các biến, chức năng và các đối tượng phụ mà tôi kết hợp thông qua một cuộc gọi đến dojo.mixin), vì vậy điều tôi thực sự muốn là biết mã khi được tạo ra, giống như vậy
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*/);"
nhưng, của bạn đã biết, tất cả những gì được sản xuất là một cái gì đó giống như "Object". Tôi đã gần như tìm thấy một khoảng cách này, bằng cách đặt khởi tạo trong một chức năng như vậy
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*/);
}"
nhưng đó là khó hiểu, và sau đó tôi phải đi vào và bắt đầu phân tích các chuỗi mà tôi không muốn làm.
EDIT: Lý do tôi yêu cầu tất cả điều này là b/c Tôi muốn tạo mã có thể thực thi động và mô đun cao. Tôi đang xử lý canvas. Tôi muốn người dùng có thể nhấp vào một, ví dụ, hình chữ nhật, xem mã của nó, và sửa đổi và sau đó tải/thực hiện nó. Tôi có một loạt quy tắc nhưng về cơ bản tôi có một lớp hình dạng và mọi thứ xác định hình dạng đó (màu sắc, độ trong suốt, đầy, nét ...) phải được chuyển thành tham số đối tượng cosntructor, như sau:
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);
}
});
Bằng cách này mã được tự động mô-đun, tôi không phải lo lắng về màu sắc được xác định ở đầu trang và sau đó chiều cao được xác định một nửa xuống dưới trang, v.v. Bây giờ điều duy nhất tôi cần là bằng cách nào đó, vượt qua như một tham số, toàn bộ chuỗi đại diện trên của khởi tạo. Tôi có thể bọc nó trong một chức năng và gọi toString trên đó, như vậy
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()
});
}
nhưng sau đó có hai vấn đề. 1) Tôi phải tự xóa function wrapper()
và theo sau }
cũng như di chuyển mọi dòng sang bên trái bằng một tab. 2) không đảm bảo rằng người dùng sẽ nhớ bao gồm chức năng trình bao bọc vì nó hoàn toàn không cần thiết cho các mục đích vẽ. Tôi đang cố gắng nghĩ ra một cách mà trình bao bọc có vẻ tự nhiên, nhưng tôi không thể nghĩ ra được. Nhưng sau đó một lần nữa tôi đã không ngủ trong hơn 30 giờ.
+1 chỉ để tham chiếu Kaiser Sauze ...mặc dù tôi nghĩ rằng nó được đánh vần Keyser Söze ;-) –
@ Jason: Tôi không bao giờ có thể nhớ làm thế nào để đánh vần nó, vì vậy khi tôi đưa ra số của tôi cho phụ nữ, tôi đi bởi Rolo Tomasi ;-) – puk