2017-02-18 18 views
6

tôi đã chạy những dòng sau trong giao diện điều khiển của tôi (một lần một kịch bản jquery đã được tải), và nhận được kết quả như sau:

$(this) 
> [Window] 
$(this) != $(this) 
> true 
$(this) == $(this) 
> false 
$(this) === $(this) 
> false 

Và tôi không biết những bước cần thực hiện để tìm ra những gì đang xảy ra trên. Tôi đoán là có một số đối tượng có giá trị dựa trên thời gian đang thay đổi, nhưng tôi tự hỏi liệu nó có khác gì không. Tôi sẽ cố gắng so sánh các giá trị trong thời gian chờ đợi, nhưng tôi hy vọng ai đó có thể hiểu những gì đang xảy ra ở đây.

Chỉnh sửa để giải quyết vấn đề mà tôi không biết về việc triển khai cơ bản là $ (arg). Tôi không biết rằng nó trả về một đối tượng tham chiếu mới. Vì vậy, tôi không tin rằng đây là một bản sao của "Làm thế nào để xác định bình đẳng cho hai đối tượng JavaScript?".

+0

http://stackoverflow.com/questions/201183/how-to-determine-equality-for-two-javascript-objects – j08691

+1

_ "Tôi sẽ cố gắng so sánh các giá trị trong thời gian chờ đợi" _ Bạn đang cố gắng làm gì mục đích? – guest271314

+1

@ guest271314 So sánh để xem liệu tất cả các thuộc tính có bằng nhau về giá trị hay không. Bây giờ tôi thấy rằng javascript bằng đánh giá dựa trên sự bình đẳng một mình VÀ $ (this) trả về một tham chiếu mới mỗi khi nó được gọi. Vì vậy, baao, tôi không nghĩ rằng đây là một bản sao. Tôi đã không biết rằng $ (điều này) trả về một đối tượng tham chiếu mới để "này" mỗi lần, và điều đó không được giải quyết trong câu hỏi được liên kết của bạn. – NicholasFolk

Trả lời

6

Sử dụng $() trả về phiên bản của jQuery. Vì vậy, bạn tạo một cá thể với this và một phiên bản khác của this, bạn có hai phiên bản riêng biệt. Mặc dù họ chia sẻ cùng một tham chiếu đến this, các phiên bản không giống nhau, và đó là những gì đang được so sánh.


Nó có thể giúp bạn có một ví dụ trực quan và có thể làm mọi việc rõ ràng hơn một chút. jQuery hoạt động như một lớp. Vì vậy, hãy sử dụng một ví dụ rất đơn giản nơi vì lợi ích của ví dụ của, hàm $() không tồn tại:

class jQuery { 
    constructor(element) { 
     this.element = element; 
    } 
} 

var obj1 = new jQuery(this); 
var obj2 = new jQuery(this); 

console.log(obj1 === obj2); // false 

Cả hai của những người đang sử dụng cùng một lập luận chính xác (this) để tạo ra một "jQuery" đối tượng mới. Nhưng, một lần nữa, obj1 là một trường hợp hoàn toàn khác với obj2. Cả hai đều có vị trí riêng của họ trong bộ nhớ.

+3

+1 - Hơn nữa, nếu bạn muốn so sánh các giá trị, hãy sử dụng 'this === this'. Để làm rõ, khi bạn quấn nó với '$()', một thể hiện của một đối tượng jQuery (https://learn.jquery.com/using-jquery-core/jquery-object/) được trả về (bạn có thể muốn để làm rõ rằng trong câu trả lời của bạn). –

+0

Được đánh dấu là câu trả lời vì nó đề cập đến thư mục gốc của câu hỏi, về cơ bản là "trả lại $ (...) (hoặc làm gì dưới mui xe)?". – NicholasFolk

+1

@NicholasFolk, tuyệt vời. Tôi cũng đã đi trước và thêm một ví dụ rõ ràng hơn về cách hoạt động đó do nhận xét của JoshCrozier. – KevBot

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