oArchive.action.test2
giúp bạn một tham chiếu đến một hàm callback
sau đó trỏ tới, nhưng sau đó chức năng đó được gọi là sử dụng callback()
, có nghĩa là nó không được gọi là một phương pháp và do đó this
là đối tượng toàn cầu. Điểm mấu chốt là this
không bị ràng buộc với một hàm: nó được xác định bởi cách hàm được gọi.
Trong trường hợp này bạn có thể làm một cách rõ ràng this
trỏ đến đối tượng hành động (nhưng không phải là đối tượng lưu trữ) bằng cách sử dụng các hàm callback của call
hoặc apply
phương pháp:
test: function(callback) {
callback.call(this);
},
Để có được nó this
là đối tượng lưu trữ thay vào đó, bạn sẽ cần chuyển đối tượng lưu trữ trong:
var archive = function(){}
archive.prototype.action = {
test: function(callback, archive){
callback.call(archive);
},
test2: function(){
console.log(this);
}
}
var oArchive = new archive();
oArchive.action.test(oArchive.action.test2, oArchive);
Nguồn
2010-04-27 08:21:23