Về cơ bản, tôi đang cố gắng hiểu và tìm hiểu nguyên tắc làm việc của từ khóa 'này' trong JavaScript.Từ khoá 'này' đề cập đến đối tượng nào trong một hàm bên trong một hàm khác?
Theo như tôi hiểu 'this' đề cập đến đối tượng (chức năng) mà nó là bên trong tại thời điểm đó.
Vì vậy, bằng cách tin điều này, tôi muốn kiểm tra đầu ra của mã đơn giản dưới đây:
<body>
<input type="button" value="Add Age" onclick="Outer()" />
<script type="text/javascript">
function Outer(){
if(typeof this.Father == 'undefined')
{
this.Father = 0;
}
this.Father+=2;
alert(this.Father);
inner();
function inner(){
if(typeof this.Son== 'undefined')
{
this.Son = 0;
};
this.Son++;
alert(this.Son);
alert(this.Father);
};
};
</script>
</body>
Và sản lượng của nó bối rối cho tôi. Bởi vì trong hàm inner(), this.Son xuất ra giá trị số nguyên tăng dần của Con. Nhưng tôi mong đợi this.Father thất bại vì inner() không có thuộc tính .Father. Nhưng thay vì ném một ngoại lệ nó cảnh báo giá trị của this.Father -Which dường như
- một dòng trên 'này' là bên trong()
- và sau dòng 'này' là Outer()
tại thời điểm này tôi có 2 câu hỏi trong tâm trí của tôi actualy:
Liệu từ khoá 'này' luôn luôn đề cập đến nhà ở phạm vi của bên ngoài ngay cả bên trong các chức năng bên trong?
Và không có bất kỳ trường hợp nào được khai báo từ khóa 'this' này tham chiếu những gì trong phương pháp? (Tôi có nghĩa là một cái gì đó mà không cần phải Lik
var myFamily = new Outer()
)
Cảm ơn,
Burak ozdogan
Cảm ơn, đây thực sự là thông tin hữu ích. bạn có thể tìm thấy một số chi tiết về các mẫu gọi trong bài viết này: http://mcarthurgfx.com/blog/article/4-ways-functions-mess-with-this – pencilCake
Và điều này cũng khá giải thích: Hàm gọi trong JavaScript - ngữ cảnh được xem xét lại - http://msmvps.com/blogs/luisabreu/archive/2009/08/24/function-invocation-in-javascript-contexts-revisited.aspx – pencilCake