2011-07-29 62 views
14

Phương thức "in" và "hasOwnProperty" có thể hoán đổi cho nhau, nhưng tôi tự hỏi liệu một phương pháp có kiểm tra các thuộc tính kế thừa hay cái gì đó và cái kia không hay cái gì đó như thế. Tôi đặc biệt quan tâm đến trường hợp sử dụng nó với một từ điển, nhưng tôi nghi ngờ rằng đó là khác với sử dụng khác.Trong Actionscript 3, sự khác nhau giữa toán tử "in" và phương thức "hasOwnProperty" là gì?

"hasOwnProperty" được mô tả trong tài liệu chính thức here và "trong" được mô tả here, nhưng nếu có sự khác biệt, tôi không tìm thấy nó rất rõ ràng.

Trả lời

14

Tin tưởng vào câu trả lời được chấp nhận quý giá thực sự khiến tôi gặp một chút rắc rối. Dường như có nhiều điều xảy ra hơn là những khác biệt liên quan đến nguyên mẫu. Những gì tôi đã tìm thấy là

hasOwnProperty không thể được sử dụng để xem liệu khóa có trong Từ điển khi khóa đó là loại tham chiếu hay không.

Đây là ví dụ để minh họa.

mã:

var test:Function = function(key:*,label:String):void 
    { 
     var d:Dictionary = new Dictionary(true); 
     d[key] = true; 
     trace(label); 
     trace(" hasOwnProperty: " + (d.hasOwnProperty(key)?"true":"false <== !!PROBLEM!!")); 
     trace(" in: " + (key in d)); 
     trace(" []: " + d[key]); 
    }; 
test({}, "indexed by object"); 
test("string", "key is string"); 
test(0, "key is number"); 
test(true, "key is boolean"); 

kết quả:

indexed by object 
    hasOwnProperty: false <== !!PROBLEM!! 
    in: true 
    []: true 
key is string 
    hasOwnProperty: true 
    in: true 
    []: true 
key is number 
    hasOwnProperty: true 
    in: true 
    []: true 
key is boolean 
    hasOwnProperty: true 
    in: true 
    []: true 
+2

Và có nhiều đến nó vẫn còn. hasOwnProperty không hỗ trợ tra cứu tĩnh. Ví dụ, '** Các thuộc tính tĩnh **' - các biến, hằng số hoặc các phương thức được định nghĩa với từ khóa tĩnh trong lớp định nghĩa của đối tượng hoặc bất kỳ lớp siêu lớp nào của nó; và '** Đặc tính nguyên mẫu **' - các thuộc tính được xác định trên một đối tượng nguyên mẫu là một phần của chuỗi nguyên mẫu của đối tượng. 'sẽ trả về' false'. –

+0

Một cách khác để xem nó là 'in' sẽ cho tôi biết nếu nó ném một lỗi nếu tôi truy cập thuộc tính hoặc phương thức mà ở đó' hasOwnProperty' sẽ không vì nó không kiểm tra xem thuộc tính tĩnh hoặc nguyên mẫu hay phương thức tồn tại. –

4

Thay đổi tôi biết là in tra cứu chuỗi nguyên mẫu trong khi hasOwnProperty không, hầu hết các nhà phát triển AS3 không sử dụng mẫu thử nghiệm, vì vậy nó không phải tất cả những gì liên quan để sử dụng hàng ngày.

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