Thiyaneshwaran S
Thiyaneshwaran S

Reputation: 1135

hasOwnProperty in JavaScript

Consider:

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 called on the body.onload event.

I expected shape1.hasOwnProperty(name) to return true, but it's returning false.

What is the correct behavior?

Upvotes: 79

Views: 145952

Answers (4)

SLaks
SLaks

Reputation: 888017

hasOwnProperty is a normal JavaScript function that takes a string argument.

When you call shape1.hasOwnProperty(name) you are passing it the value of the name variable (which doesn't exist), just as it would if you wrote alert(name).

You need to call hasOwnProperty with a string containing name, like this: shape1.hasOwnProperty("name").

Upvotes: 157

KARTHIKEYAN.A
KARTHIKEYAN.A

Reputation: 20118

hasOwnProperty() is a nice property to validate object keys. Example:

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

obj.hasOwnProperty('a') // true

Upvotes: 2

Ernelli
Ernelli

Reputation: 4050

Try this:

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

When working with reflection in JavaScript, member objects are always refered to as the name as a string. For example:

for(i in obj) { ... }

The loop iterator i will be hold a string value with the name of the property. To use that in code you have to address the property using the array operator like this:

 for(i in obj) {
   alert("The value of obj." + i + " = " + obj[i]);
 }

Upvotes: 3

Pablo Cabrera
Pablo Cabrera

Reputation: 5849

hasOwnProperty expects the property name as a string, so it would be shape1.hasOwnProperty("name")

Upvotes: 19

Related Questions