2009-06-26 24 views
24
var UI$Contract$ddlForm_change = function() { 

    //'this' is currently the drop down that fires the event 
    // My question is can I change the context so "this" represents another object? 
    this = SomeObject; 

    // then call methods on the new "this" 
    this.someMethod(someParam); 
}; 

là điều này có thể? Cảm ơn, ~ ck tại San DiegoTôi có thể thay đổi ngữ cảnh của javascript "này" không?

+0

Xem câu trả lời cho câu hỏi này: http://stackoverflow.com/questions/456967/javascript-how-to-set-this-variable-easily – molf

+2

yepp, nhiều hơn hoặc ít hơn một bản sao của lưu lượng truy cập http: // stackoverflow. com/questions/456967/javascript-how-to-set-this-variable-dễ dàng Câu trả lời được chấp nhận là sử dụng cuộc gọi()/apply(), xem https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Chức năng/áp dụng – VolkerK

+0

Đây chỉ là QUÁ khó hiểu. Tất cả các câu trả lời đều nói không, bạn không thể làm được. Rõ ràng, các câu trả lời cho câu hỏi trùng lặp theo cách có, bạn có thể làm điều đó. Đi con số. – DOK

Trả lời

39

Không, điều đó là không thể.

Bạn có thể gọi một phương thức với một giá trị xác định cho này (sử dụng method.apply()/method.call()) nhưng bạn có thể không tái gán từ khóa, this.

+0

thông tin thêm tại [joshuakehn.com] (http://joshuakehn.com/2011/10/20/Understanding-JavaScript-Context.html) – vdubus

+0

Bạn cũng có thể chuyển 'this' làm đối số cho hàm trong lệnh gọi tới 'UI $ Contract $ ddlForm_change', sau đó bạn có thể sử dụng đối số đó làm ngữ cảnh/truy cập thuộc tính của nó –

7

J-P là chính xác. Điều này là không thể. Tham khảo tài liệu đặc tả ngôn ngữ JavaScript ECMA-262. Bạn có thể tải về tiêu chuẩn từ đây:

http://www.ecma-international.org/publications/standards/Ecma-262.htm

Các tập tin là ECMA-262.pdf và trên trang 39, mục 10.1.7.

10.1.7 này

Có một giá trị này gắn liền với mỗi thực hiện bối cảnh hoạt động. Giá trị tùy thuộc vào người gọi và loại mã đang được thực thi và được xác định khi điều khiển nhập vào ngữ cảnh thực thi . Giá trị này được kết hợp với ngữ cảnh thực thi là không thay đổi.

Lưu ý "là không thay đổi". tức là không thể thay đổi.

9

Bạn không thể thay đổi những gì this đề cập đến từ bên trong chức năng.

Tuy nhiên, bạn có thể gọi một hàm trong một bối cảnh cụ thể - để this đề cập đến một đối tượng cụ thể - bằng cách sử dụng call hoặc apply.

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