जावास्क्रिप्ट में hasOwnProperty


79

विचार करें:

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
}

.welcomeMessagebody.onloadघटना पर बुलाया ।

मुझे shape1.hasOwnProperty(name)सच लौटने की उम्मीद थी, लेकिन यह गलत है।

सही व्यवहार क्या है?


5
इसके लिए एक तार की आवश्यकता होती है, इसलिए इसके "name"विपरीतname
— AO_

जवाबों:


157

hasOwnProperty एक सामान्य जावास्क्रिप्ट फ़ंक्शन है जो एक स्ट्रिंग तर्क लेता है।

जब आप कॉल shape1.hasOwnProperty(name)करते हैं तो आप इसे nameवैरिएबल (जो मौजूद नहीं है) का मान दे रहे हैं , ठीक वैसे ही जैसे आप लिखते हैं alert(name)।

आपको hasOwnPropertyएक स्ट्रिंग युक्त कॉल करने की आवश्यकता है name, जैसे shape1.hasOwnProperty("name"):।


1
HasOwnProperty () एक बूलियन मान जोड़ने के लिए मत भूलना जो संपत्ति का संकेत देता है (इस मामले में नाम) निर्दिष्ट मौजूद है या नहीं
— maheshmnj

18

hasOwnProperty एक स्ट्रिंग के रूप में संपत्ति के नाम की अपेक्षा करता है, इसलिए यह होगा shape1.hasOwnProperty("name")


3

इसे इस्तेमाल करे:

समारोह में आपका स्वागत है ()
{
    var shape1 = नया आकार ();
    // सतर्क (आकार 1. निकासी) ();
    चेतावनी (आकार 1.hasOwnProperty ("नाम"));
}

जावास्क्रिप्ट में प्रतिबिंब के साथ काम करते समय, सदस्य वस्तुओं को हमेशा स्ट्रिंग के रूप में नाम के रूप में संदर्भित किया जाता है। उदाहरण के लिए:

for(i in obj) { ... }

लूप पुनरावृत्ति i संपत्ति के नाम के साथ एक स्ट्रिंग मान होगा। उस कोड का उपयोग करने के लिए आपको इस तरह से सरणी ऑपरेटर का उपयोग करके संपत्ति को संबोधित करना होगा:

 के लिए (मैं obj में) {
   चेतावनी ("ओब्ज का मूल्य।" + i + "=" + obj [i]);
 }

2

hasOwnProperty () ऑब्जेक्ट कुंजियों को मान्य करने के लिए एक अच्छी संपत्ति है। उदाहरण:

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

obj.hasOwnProperty('a') // true

पुन "अच्छा संपत्ति" : यह एक समारोह नहीं है?
— पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.