hasOwnProperty trong JavaScript


79

Xem xét:

function Shape() {
    this.name = "Generic";
    this.draw = function() {
        return "Drawing " + this.name + " Shape";
    };
}

function welcomeMessage()
{
    var shape1 = new Shape();
    //alert(shape1.draw());
    alert(shape1.hasOwnProperty(name));  // This is returning false
}

.welcomeMessageđã gọi vào body.onloadsự kiện.

Tôi mong đợi shape1.hasOwnProperty(name)trả về true, nhưng nó lại trả về false.

Hành vi đúng là gì?


5
nó yêu cầu một chuỗi, "name"trái ngược vớiname
AO_

Câu trả lời:


157

hasOwnProperty là một hàm JavaScript bình thường nhận đối số chuỗi.

Khi bạn gọi, shape1.hasOwnProperty(name)bạn đang truyền cho nó giá trị của namebiến (không tồn tại), giống như khi bạn viết alert(name).

Bạn cần phải gọi hasOwnPropertyvới một chuỗi chứa name, như thế này: shape1.hasOwnProperty("name").


1
Đừng quên để thêm hasOwnProperty () trả về một giá trị boolean chỉ ra thuộc tính (tên trường hợp này) quy định tồn tại hay không
maheshmnj

18

hasOwnProperty mong đợi tên thuộc tính là một chuỗi, vì vậy nó sẽ là shape1.hasOwnProperty("name")


3

Thử cái này:

function welcomeMessage ()
{
    var shape1 = new Shape ();
    // alert (shape1.draw ());
    alert (shape1.hasOwnProperty ("name"));
}

Khi làm việc với phản chiếu trong JavaScript, các đối tượng thành viên luôn được coi là tên dưới dạng một chuỗi. Ví dụ:

for(i in obj) { ... }

Trình lặp vòng lặp i sẽ giữ một giá trị chuỗi với tên của thuộc tính. Để sử dụng điều đó trong mã, bạn phải giải quyết thuộc tính bằng cách sử dụng toán tử mảng như sau:

 cho (tôi trong obj) {
   alert ("Giá trị của obj." + i + "=" + obj [i]);
 }

2

hasOwnProperty () là một thuộc tính tốt để xác thực các khóa đối tượng. Thí dụ:

var obj = {a:1, b:2};

obj.hasOwnProperty('a') // true

Re "nice property" : Nó không phải là một chức năng sao?
Peter Mortensen
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.