जावास्क्रिप्ट ऑब्जेक्ट की क्लास कैसे प्राप्त करें?


728

मैंने एक जावास्क्रिप्ट ऑब्जेक्ट बनाया है, लेकिन मैं उस ऑब्जेक्ट का वर्ग कैसे निर्धारित कर सकता हूं?

मुझे जावा की .getClass()विधि के समान कुछ चाहिए ।


6
उदाहरण के लिए, मैं एक व्यक्ति को इस तरह बनाता हूं: var p = new Person (); मेरे पास एक व्यक्ति वस्तु है जिसे "पी" कहा जाता है, मैं कक्षा नाम वापस लेने के लिए "पी" का उपयोग कैसे कर सकता हूं: "व्यक्ति"।
DNB5brims


अद्यतन: ECMAScript 6 के अनुसार, जावास्क्रिप्ट में अभी भी एक classप्रकार नहीं है । यह करता है एक है classकीवर्ड और classप्रोटोटाइप, जिसमें तरीकों और अधिक आसानी से कर सकते हैं पहुँच बनाने के लिए वाक्य रचना super
james_womack

Object.className के बारे में क्या?
पॉल बैसेंको

@ पॉल-बैसेंको: "क्लासनेम" आपको ऑब्जेक्ट की क्लास नहीं बताएगा, लेकिन एक HTML एलिमेंट की "क्लास" प्रॉपर्टी का कंटेंट वापस कर देगा, जो सीएसएस क्लासेस को संदर्भित करता है। आप उन्हें आसानी से प्रबंधित करने के लिए "क्लासिस्ट" का उपयोग करना चाहते हैं, लेकिन यह ओपी के सवाल से संबंधित नहीं है।
ओब्सीडियन

जवाबों:


1009

getClass()जावास्क्रिप्ट में जावा के लिए कोई सटीक समकक्ष नहीं है । ज्यादातर यह कि जावास्क्रिप्ट एक प्रोटोटाइप-आधारित भाषा होने के कारण , जैसा कि जावा का वर्ग-आधारित है।

आपको क्या चाहिए getClass(), इसके आधार पर जावास्क्रिप्ट में कई विकल्प हैं:

कुछ उदाहरण:

function Foo() {}
var foo = new Foo();

typeof Foo;             // == "function"
typeof foo;             // == "object"

foo instanceof Foo;     // == true
foo.constructor.name;   // == "Foo"
Foo.name                // == "Foo"    

Foo.prototype.isPrototypeOf(foo);   // == true

Foo.prototype.bar = function (x) {return x+x;};
foo.bar(21);            // == 42

नोट: यदि आप Uglify के साथ अपना कोड संकलित कर रहे हैं तो यह गैर-वैश्विक श्रेणी के नामों को बदल देगा। इसे रोकने के लिए, बदसूरत बनाना एक है --mangleपरम आप उपयोग कर रहा है गलत पर सेट कर सकते हैं कि घूंट या घुरघुराना


6
यह संभवतः होना चाहिए func.prototype(हाँ, फ़ंक्शन ऑब्जेक्ट हैं, लेकिन prototypeसंपत्ति केवल फ़ंक्शन ऑब्जेक्ट्स पर प्रासंगिक है)।
मीलों

5
आप भी उल्लेख कर सकते हैं instanceof/ isPrototypeOf()और गैर-मानक__proto__
क्रिस्टोफ

9
ईएस 5 ने औपचारिक रूप सेObject.getPrototypeOf()
क्रिस्टोफ

22
चेतावनी : इस बात पर भरोसा न constructor.nameकरें कि क्या आपका कोड छोटा किया जा रहा है। समारोह का नाम मनमाने ढंग से बदलने वाला है।
igorsantos07

3
@ igorsantos07, कम से कम 2019 में; "ऑनलाइन जावास्क्रिप्ट मिनिफ़ायर" के लिए शीर्ष 5-10 Google परिणाम construction.nameको अनदेखा / कम नहीं करने के लिए टोकन के रूप में पहचानते हैं । अधिकांश के अलावा (यदि सभी नहीं) मिनिफायर सॉफ़्टवेयर अपवाद नियम प्रदान करते हैं।
वल्कन

296
obj.constructor.name

आधुनिक ब्राउज़रों में एक विश्वसनीय तरीका है। Function.nameआधिकारिक तौर पर ES6 में मानक में जोड़ा गया था, जिससे यह एक स्ट्रिंग के रूप में जावास्क्रिप्ट ऑब्जेक्ट की "क्लास" प्राप्त करने के लिए एक मानक-अनुरूप साधन बन जाता है। यदि ऑब्जेक्ट के साथ तात्कालिकता है var obj = new MyClass(), तो यह "MyClass" लौटाएगा।

यह संख्याओं के लिए "संख्या", सरणियों के लिए "एरे" और कार्यों के लिए "फ़ंक्शन" आदि को लौटाएगा। यह आमतौर पर अपेक्षा के अनुरूप व्यवहार करता है। केवल ऐसे मामले जहां यह विफल होता है यदि कोई ऑब्जेक्ट बिना प्रोटोटाइप के बनाया जाता है, के माध्यम से Object.create( null ), या ऑब्जेक्ट को एक अनाम-परिभाषित (अनाम) फ़ंक्शन से तत्काल किया गया था।

यह भी ध्यान दें कि यदि आप अपने कोड को छोटा कर रहे हैं, तो हार्ड-कोडित प्रकार के तारों से तुलना करना सुरक्षित नहीं है। उदाहरण के लिए obj.constructor.name == "MyType", अगर जाँच के बजाय, जाँच करें obj.constructor.name == MyType.name। या बस कंस्ट्रक्टरों की तुलना स्वयं करें, हालाँकि यह DOM सीमाओं के पार काम नहीं करेगा क्योंकि प्रत्येक DOM पर कन्स्ट्रक्टर फ़ंक्शन के विभिन्न उदाहरण हैं, इस प्रकार उनके कन्स्ट्रक्टर्स पर ऑब्जेक्ट तुलना करने से काम नहीं चलेगा।


11
Function.nameजावास्क्रिप्ट मानक का हिस्सा (अभी तक) नहीं है। यह वर्तमान में Chrome और Firefox में समर्थित है, लेकिन IE (10) में नहीं।
हेलसिऑन

13
obj.constructor.nameकेवल नाम वाले कार्यों के लिए काम करता है । यानी, अगर मैं परिभाषित करता हूं var Foo = function() {}, तो इसके लिए var foo = new Foo(), foo.constructor.nameआपको खाली स्ट्रिंग देगा।
KFL

29
चेतावनी : इस बात पर भरोसा न constructor.nameकरें कि क्या आपका कोड छोटा किया जा रहा है। समारोह का नाम मनमाने ढंग से बदलने वाला है।
igorsantos07

1
Function.name ES6 का हिस्सा है, डेवलपर.
mozilla.org/en-US/docs/Web/JavaScript/Reference/…

1
@adalbertpl को ES6 से पहले मैन्युअल रूप से प्रोटोटाइप का पीछा करते हुए करना था। constructor.nameईएस 6 में नए वर्ग के समर्थन के साथ अपेक्षा के अनुसार व्यवहार करना अच्छा है ।
देवियोस 1

29

यह फ़ंक्शन "Undefined"अपरिभाषित मानों और "Null"शून्य के लिए देता है।
अन्य सभी मूल्यों के लिए, CLASSNAME-पार्ट से निकाला जाता है [object CLASSNAME], जो उपयोग करने का परिणाम है Object.prototype.toString.call(value)

function getClass(obj) {
  if (typeof obj === "undefined") return "Undefined";
  if (obj === null) return "Null";
  return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1];
}

getClass("")   === "String";
getClass(true) === "Boolean";
getClass(0)    === "Number";
getClass([])   === "Array";
getClass({})   === "Object";
getClass(null) === "Null";
// etc...

Object.prototyp.getClass = function () {obj के बजाय 'इस' का उपयोग करना अच्छा होगा
SparK

2
बेशक तब अशक्त और अपरिभाषित होना अनियंत्रित होगा क्योंकि केवल ऑब्जेक्ट के पास
गेटक्लास

8
यह केवल देशी वस्तुओं पर काम करता है। यदि आपके पास किसी तरह की विरासत है, तो आप हमेशा प्राप्त करेंगे "Object"
हेलसिऑन

हाँ, फ़ंक्शन की अंतिम पंक्ति बस होनी चाहिए return obj.constructor.name। वही परिणाम देता है, साथ ही गैर देशी वस्तुओं को भी संभालता है।
स्टीव बेनेट

18

"छद्म वर्ग" प्राप्त करने के लिए, आप कंस्ट्रक्टर फ़ंक्शन प्राप्त कर सकते हैं, द्वारा

obj.constructor

यह मानते हुए कि constructorजब आप विरासत करते हैं तो सही ढंग से सेट किया जाता है - जो कुछ इस तरह है:

Dog.prototype = new Animal();
Dog.prototype.constructor = Dog;

और ये दो पंक्तियाँ, एक साथ:

var woofie = new Dog()

को woofie.constructorइंगित करेगा Dog। ध्यान दें कि Dogएक कंस्ट्रक्टर फ़ंक्शन है, और एक Functionऑब्जेक्ट है। लेकिन आप कर सकते हैं if (woofie.constructor === Dog) { ... }

यदि आप एक स्ट्रिंग के रूप में वर्ग का नाम प्राप्त करना चाहते हैं, तो मुझे निम्नलिखित अच्छी तरह से काम करना चाहिए:

http://blog.magnetiq.com/post/514962277/finding-out-class-names-of-javascript-objects

function getObjectClass(obj) {
    if (obj && obj.constructor && obj.constructor.toString) {
        var arr = obj.constructor.toString().match(
            /function\s*(\w+)/);

        if (arr && arr.length == 2) {
            return arr[1];
        }
    }

    return undefined;
}

यह कंस्ट्रक्टर फ़ंक्शन में जाता है, इसे स्ट्रिंग में कनवर्ट करता है, और कंस्ट्रक्टर फ़ंक्शन का नाम निकालता है।

ध्यान दें कि obj.constructor.nameअच्छी तरह से काम हो सकता है, लेकिन यह मानक नहीं है। यह क्रोम और फ़ायरफ़ॉक्स पर है, लेकिन IE पर नहीं, IE 9 या IE 10 RTM सहित।


13

आप कंस्ट्रक्टर फ़ंक्शन का संदर्भ प्राप्त कर सकते हैं जिसने निर्माणकर्ता संपत्ति का उपयोग करके ऑब्जेक्ट बनाया है :

function MyObject(){
}

var obj = new MyObject();
obj.constructor; // MyObject

आप उपयोग कर सकते हैं आप रनटाइम पर एक वस्तु के प्रकार पुष्टि करने के लिए की जरूरत है instanceof ऑपरेटर:

obj instanceof MyObject // true

क्या यह कंस्ट्रक्टर फ़ंक्शन को स्वयं वापस नहीं करता है, जैसे, आप इसे फिर से कॉल कर सकते हैं और उस प्रकार का एक नया ऑब्जेक्ट बना सकते हैं?
स्पार्क

1
@SparK हाँ, हालाँकि आप अभी भी इसका उपयोग तुलना के लिए कर सकते हैं जब तक आप एक ही डोम पर हैं (आप फ़ंक्शन ऑब्जेक्ट्स की तुलना कर रहे हैं)। हालाँकि, कंस्ट्रक्टर को एक स्ट्रिंग में बदलना और उसकी तुलना करना बहुत बेहतर अभ्यास है, विशेष रूप से क्योंकि यह आइफ्रेम का उपयोग करते समय DOM सीमाओं के पार काम करता है।
devios1

यह उत्तर "वर्ग" (या कम से कम उस वस्तु को संभालता है जिसका उपयोग कक्षा का एक उदाहरण बनाने के लिए किया जा सकता है - जो कि "कक्षा" के समान है)। उपरोक्त उत्तर सभी स्ट्रिंग को लौटाते हैं जो "क्लास ऑब्जेक्ट" (जैसा भी था) के समान नहीं है।
माइक पी।

8

ईसीएमएस्क्रिप्ट 6, बैकवर्ड-कम्पैटिबिलिटी के अपने अटूट रिकॉर्ड को ध्यान में रखते हुए, जावास्क्रिप्ट में अभी भी एक classप्रकार नहीं है (हालांकि हर कोई इसे नहीं समझता है)। यह करता है एक है classअपने हिस्से के रूप में कीवर्ड classप्रोटोटाइप-लेकिन बनाने के लिए वाक्य रचना अभी भी कोई चीज वर्ग कहा जाता है । जावास्क्रिप्ट अब नहीं है और कभी भी एक शास्त्रीय ओओपी भाषा नहीं रही है । कक्षा के संदर्भ में जेएस की बात करना या तो केवल भ्रामक है या अभी तक प्रोटोटाइपिक वंशानुक्रम (बस इसे वास्तविक बनाए रखने) का संकेत नहीं है।

इसका मतलब this.constructorहै कि constructorफ़ंक्शन का संदर्भ पाने के लिए अभी भी एक शानदार तरीका है । और this.constructor.prototypeस्वयं प्रोटोटाइप तक पहुंचने का तरीका है। चूंकि यह जावा नहीं है, इसलिए यह एक वर्ग नहीं है। यह प्रोटोटाइप वस्तु है जिसका उदाहरण आपके इंस्टेंट से लिया गया था। यहाँ एक प्रोटोटाइप श्रृंखला बनाने के लिए ES6 सिंथैटिक शुगर का उपयोग करने का एक उदाहरण है:

class Foo {
  get foo () {
    console.info(this.constructor, this.constructor.name)
    return 'foo'
  }
}

class Bar extends Foo {
  get foo () {
    console.info('[THIS]', this.constructor, this.constructor.name, Object.getOwnPropertyNames(this.constructor.prototype))
    console.info('[SUPER]', super.constructor, super.constructor.name, Object.getOwnPropertyNames(super.constructor.prototype))

    return `${super.foo} + bar`
  }
}

const bar = new Bar()
console.dir(bar.foo)

यह वही है जो आउटपुट का उपयोग करता है babel-node:

> $ babel-node ./foo.js                                                                                                                    6.2.0 master ●]
[THIS] [Function: Bar] 'Bar' [ 'constructor', 'foo' ]
[SUPER] [Function: Foo] 'Foo' [ 'constructor', 'foo' ]
[Function: Bar] 'Bar'
'foo + bar'

ये लो! 2016 में, classजावास्क्रिप्ट में एक कीवर्ड है, लेकिन फिर भी कोई वर्ग प्रकार नहीं है। this.constructorकंस्ट्रक्टर फ़ंक्शन प्राप्त करने का सबसे अच्छा तरीका है, this.constructor.prototypeस्वयं प्रोटोटाइप तक पहुंचने का सबसे अच्छा तरीका है।


7

मेरे पास अब सामान्य काम करने के लिए एक स्थिति थी और इसका इस्तेमाल किया:

class Test {
  // your class definition
}

nameByType = function(type){
  return type.prototype["constructor"]["name"];
};

console.log(nameByType(Test));

यदि आपके पास ऑब्जेक्ट का एक उदाहरण नहीं है, तो मुझे केवल उसी प्रकार इनपुट द्वारा वर्ग नाम प्राप्त करने का एकमात्र तरीका मिला है।

(ES2017 में लिखा गया है)

डॉट नोटेशन भी ठीक काम करता है

console.log(Test.prototype.constructor.name); // returns "Test" 

आह यह मैं क्या देख रहा था। यदि यह त्वरित नहीं है, तो आपको कक्षा नाम प्राप्त करने के लिए 'प्रोटोटाइप' का उपयोग करना होगा। अनेक अनेक धन्यवाद!
आर्टोकुन

4

ईएस 6 में जावास्क्रिप्ट क्लासेस के लिए आप उपयोग कर सकते हैं object.constructorgetClass()विधि वर्ग के नीचे उदाहरण वर्ग में ES6 वर्ग देता है जैसा कि आप उम्मीद करेंगे:

var Cat = class {

    meow() {

        console.log("meow!");

    }

    getClass() {

        return this.constructor;

    }

}

var fluffy = new Cat();

...

var AlsoCat = fluffy.getClass();
var ruffles = new AlsoCat();

ruffles.meow();    // "meow!"

यदि आप getClassविधि से कक्षा को तुरंत सुनिश्चित करते हैं तो सुनिश्चित करें कि आप इसे कोष्ठक जैसे में लपेटते हैंruffles = new ( fluffy.getClass() )( args... );


3

मुझे आईई में object.constructor.toString()वापसी मिलती है [object objectClass], बजाय function objectClass () {}चोम में लौट आई। तो, मुझे लगता है कि http://blog.magnetiq.com/post/514962277/finding-out-class-names-of-javascript-objects में कोड IE में अच्छी तरह से काम नहीं कर सकता है। और मैंने कोड इस प्रकार तय किया है:

कोड:

var getObjectClass = function (obj) {
        if (obj && obj.constructor && obj.constructor.toString()) {

                /*
                 *  for browsers which have name property in the constructor
                 *  of the object,such as chrome 
                 */
                if(obj.constructor.name) {
                    return obj.constructor.name;
                }
                var str = obj.constructor.toString();
                /*
                 * executed if the return of object.constructor.toString() is 
                 * "[object objectClass]"
                 */

                if(str.charAt(0) == '[')
                {
                        var arr = str.match(/\[\w+\s*(\w+)\]/);
                } else {
                        /*
                         * executed if the return of object.constructor.toString() is 
                         * "function objectClass () {}"
                         * for IE Firefox
                         */
                        var arr = str.match(/function\s*(\w+)/);
                }
                if (arr && arr.length == 2) {
                            return arr[1];
                        }
          }
          return undefined; 
    };

2

जावास्क्रिप्ट में, कोई वर्ग नहीं हैं, लेकिन मुझे लगता है कि आप निर्माता का नाम चाहते हैं और obj.constructor.toString()आपको बताएंगे कि आपको क्या चाहिए।


1
यह कंस्ट्रक्टर फ़ंक्शन की पूरी परिभाषा को एक स्ट्रिंग के रूप में लौटाएगा। आप वास्तव में क्या चाहते हैं .name
devios1

4
लेकिन .nameIE 9 पर भी नहीं परिभाषित किया गया है
nonopolarity

1

Dfa से सहमत, इसीलिए मैं प्रोटोटे को वर्ग के रूप में मानता हूं जब कोई नामित वर्ग नहीं मिला

यहाँ मेरे मन के तरीके से मेल करने के लिए एली ग्रे द्वारा पोस्ट किए गए एक का एक उन्नत कार्य है

function what(obj){
    if(typeof(obj)==="undefined")return "undefined";
    if(obj===null)return "Null";
    var res = Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1];
    if(res==="Object"){
        res = obj.constructor.name;
        if(typeof(res)!='string' || res.length==0){
            if(obj instanceof jQuery)return "jQuery";// jQuery build stranges Objects
            if(obj instanceof Array)return "Array";// Array prototype is very sneaky
            return "Object";
        }
    }
    return res;
}

1

यदि आपको न केवल GET वर्ग की आवश्यकता है, बल्कि इसे केवल एक उदाहरण होने से भी बढ़ाएँ, लिखें:

चलो करते है

 class A{ 
   constructor(name){ 
     this.name = name
   }
 };

 const a1 = new A('hello a1');

ऐसा करने के लिए केवल उदाहरण का उपयोग करने के लिए A:

const a2 = new ((Object.getPrototypeOf(a)).constructor())('hello a2')
// the analog of const a2 = new A()

console.log(a2.name)//'hello a2'

0

मैं उपयोग करने का सुझाव देता हूं Object.prototype.constructor.name:

Object.defineProperty(Object.prototype, "getClass", {
    value: function() {
      return this.constructor.name;
    }
});

var x = new DOMParser();
console.log(x.getClass()); // `DOMParser'

var y = new Error("");
console.log(y.getClass()); // `Error'

0

यहाँ के एक कार्यान्वयन है getClass()औरgetInstance()

आप किसी ऑब्जेक्ट की क्लास के लिए एक संदर्भ प्राप्त कर सकते हैं this.constructor

एक उदाहरण के संदर्भ से:

function A() {
  this.getClass = function() {
    return this.constructor;
  }

  this.getNewInstance = function() {
    return new this.constructor;
  }
}

var a = new A();
console.log(a.getClass());  //  function A { // etc... }

// you can even:
var b = new (a.getClass());
console.log(b instanceof A); // true
var c = a.getNewInstance();
console.log(c instanceof A); // true

स्थिर संदर्भ से:

function A() {};

A.getClass = function() {
  return this;
}

A.getInstance() {
  return new this;
}

2
सिर्फ क्यों नहीं this.constructor?
सोलोमन उकॉ

1
मुझे नहीं पता, लेकिन अगर यह बेहतर है, तो आप निश्चित रूप से इसे बेहतर बनाने के लिए उत्तर को संपादित कर सकते हैं क्योंकि आप बेहतर पाते हैं, आखिरकार यह एक समुदाय है।
ब्रूनो फिंगर

0

आप भी कुछ ऐसा कर सकते हैं

 class Hello {
     constructor(){
     }
    }
    
      function isClass (func) {
        return typeof func === 'function' && /^class\s/.test(Function.prototype.toString.call(func))
    }
    
   console.log(isClass(Hello))

यह आपको बताएगा कि इनपुट क्लास है या नहीं


-2

जावास्क्रिप्ट एक कक्षा-कम भाषाएं हैं: ऐसी कोई कक्षाएं नहीं हैं जो जावा के समान एक वर्ग के व्यवहार को परिभाषित करती हैं। जावास्क्रिप्ट, ऑब्जेक्ट गुणों को परिभाषित करने के तरीकों, और विरासत सहित कक्षाओं के बजाय प्रोटोटाइप का उपयोग करता है। जावास्क्रिप्ट में प्रोटोटाइप के साथ कई वर्ग-आधारित सुविधाओं का अनुकरण करना संभव है।


12
मैंने अक्सर कहा है कि जावास्क्रिप्ट में कक्षा का अभाव है :)
स्टीवन

4
अद्यतन: ECMAScript 6 के अनुसार, जावास्क्रिप्ट में अभी भी एक classप्रकार नहीं है । यह करता है एक है classकीवर्ड और classप्रोटोटाइप, जिसमें तरीकों और अधिक आसानी से कर सकते हैं पहुँच बनाने के लिए वाक्य रचना super
james_womack

-3

प्रश्न पहले से ही उत्तर दिया गया लगता है, लेकिन ओपी उसी तरह की वस्तु और वस्तु तक पहुंचना चाहता है, जैसे हम जावा में करते हैं और चयनित उत्तर पर्याप्त नहीं है।

निम्नलिखित स्पष्टीकरण के साथ, हम किसी वस्तु का एक वर्ग प्राप्त कर सकते हैं (इसे वास्तव में जावास्क्रिप्ट में प्रोटोटाइप कहा जाता है)।

var arr = new Array('red', 'green', 'blue');
var arr2 = new Array('white', 'black', 'orange');

आप इस तरह से एक संपत्ति जोड़ सकते हैं:

Object.defineProperty(arr,'last', {
  get: function(){
    return this[this.length -1];
  }
});
console.log(arr.last) // blue

लेकिन .lastसंपत्ति केवल ' arr' ऑब्जेक्ट के लिए उपलब्ध होगी जो कि ऐरे प्रोटोटाइप से तुरंत ली गई है। इसलिए, .lastएरे प्रोटोटाइप से तात्कालिक रूप से सभी वस्तुओं के लिए संपत्ति उपलब्ध होने के लिए, हमें .lastऐरे प्रोटोटाइप के लिए संपत्ति को परिभाषित करना होगा :

Object.defineProperty(Array.prototype,'last', {
  get: function(){
    return this[this.length -1];
  }
});
console.log(arr.last) // blue
console.log(arr2.last) // orange

यहाँ समस्या यह है, आपको यह जानना होगा कि ' arr' और ' arr2' वेरिएबल्स किस ऑब्जेक्ट प्रकार (प्रोटोटाइप) के हैं ! दूसरे शब्दों में, यदि आप ' arr' ऑब्जेक्ट ' ' के वर्ग प्रकार (प्रोटोटाइप) को नहीं जानते हैं , तो आप उनके लिए कोई संपत्ति परिभाषित नहीं कर पाएंगे। उपरोक्त उदाहरण में, हम जानते हैं कि गिरफ्तारी सरणी वस्तु का उदाहरण है, इसीलिए हमने Array.prototype का उपयोग एक संपत्ति को परिभाषित करने के लिए किया है। लेकिन क्या होगा अगर हम ' arr' के वर्ग (प्रोटोटाइप) को नहीं जानते हैं ?

Object.defineProperty(arr.__proto__,'last2', {
  get: function(){
    return this[this.length -1];
  }
});
console.log(arr.last) // blue
console.log(arr2.last) // orange

जैसा कि आप देख सकते हैं, बिना यह जाने कि ' arr' एक ऐरे है, हम एक नई प्रॉपर्टी जोड़ सकते हैं जो ' arr' का उपयोग करके ' arr.__proto__' की क्लास को संदर्भित करता है ।

हमने arrयह जाने बिना कि यह ऐरे की एक मिसाल है , ' ' के प्रोटोटाइप को एक्सेस किया और मुझे लगता है कि ओपी ने यही पूछा है।


__proto__संपत्ति का बहिष्कार कर, और अधिक लगभग कोई फायदा है है prototypeसंपत्ति।
नीलमणिंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.