2011-07-06 28 views
8

Giống như trong ví dụ này:Làm thế nào để thực hiện một siêu trong javascript chức năng

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

    var name = this.name; // i don't want to do that. 

    // i want to have access to 'this' inside this function (sayName) 
    var sayName = function(){ 
     alert(name); // there is something like "super" in java? or similar way to do? 
    } 
    sayName(); 

}); 

Làm thế nào tôi có thể làm điều đó?

Trả lời

0

tôi thấy rất nhiều ví dụ trên Internet (jQuery dựa trên bao gồm) sử dụng này:

var that = this; 
var sayName = function() { 
    alert(that.name); 
} 
+0

-1: Đây là Mã gốc của OP. Anh ta yêu cầu thay thế cho điều này. –

+0

Điều này là không công bằng và sai. Ông hỏi: "Tôi muốn có quyền truy cập vào 'điều này' bên trong chức năng này" –

+0

Và trong dòng trên, ông chứng minh giải pháp của bạn và viết "tôi không muốn làm điều đó" –

-1

Đây là một cách khác:

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

var that = this; 

var sayName = function(){ 
    alert(that.name); 
} 
sayName(); 

}); 

Đó là siêu của bạn :-) Nghiêm túc , không có "siêu" vì nó không phải là phần mở rộng.

+0

-1: Đây là mã gốc của OP. Anh ta yêu cầu thay thế cho điều này. –

2

this không bao giờ tiềm ẩn trong JavaScript (như trong Java). Điều này có nghĩa là nếu bạn không gọi hàm như một phương thức trên một đối tượng, thì this sẽ không bị ràng buộc vào một thứ gì đó hợp lý (nó sẽ bị ràng buộc với đối tượng window trong trình duyệt). Nếu bạn muốn có một this bên trong hàm, chức năng nên được sử dụng như một phương pháp, đó là:

var teste = {name:'marcos'}; 
$(teste).each(function(){ 

    this.sayName = function(){ 
     alert(this.name); 
    } 
    this.sayName(); 

}); 

Sau đó sayName là một phương pháp và được gọi trong this

+0

bạn có thể loại bỏ một cách an toàn 'var name = ...' và thay thế 'alert (name)' bằng 'alert (this.name)', tôi tin rằng đây là ý định ban đầu. Bên cạnh đó, nó thêm 'sayName' vào đối tượng' test' và tiếp theo 'mỗi' cũng sẽ đếm' sayName', điều này không tốt. –

+0

@Victor: Không, bạn không thể. –

+0

@Tomalak Geret'kal Hãy thử nó, nó hoạt động. 'this' bên trong hàm trong khi gọi' this.sayName() 'cũng giống như otside, tức là đối tượng' teste'. –

Các vấn đề liên quan