2012-02-07 2 views

ответ

5

Все экземпляры объекта имеют свойство constructor, которое указывает функцию, которая создает прототип объекта.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object#Properties_2

Оператор in смотрит на все свойства, включая унаследованные из них. Если вы хотите, чтобы увидеть свойства на самом объекте, вы можете использовать hasOwnProperty:

var a = {}; 
"constructor" in a; // true 
a.hasOwnProperty("constructor"); // false 

Обратите внимание, что в то время как оператор in видит "constructor", for (key in a) цикл не будет. Это связано с тем, что свойство "constructor" не перечислимо.

2

Это конструктор типа Object. Ссылка на функцию constructor доступна непосредственно на этом свойстве («конструкторе») объекта (это относится к конструкторам, которые вы пишете тоже).

В свою очередь, имена объектов представлены in объектов.

6

Объекты JavaScript имеют функцию, называемую constructor, которая является функцией, создавшей экземпляр объекта. Он встроен во все объекты. Оператор in проверяет наличие что-то, называемое «конструктором» в экземпляре вашего словаря, поэтому оно возвращает true. То же самое произойдет, если вы протестировали, например, для length.

+1

Очень хороший деконструкция. –

1

constructor - это метод Object. Вы можете найти метод constructor по всем объектам, если вы не измените его. Оператор in найдет методы через цепи prototype. Именно поэтому рекомендуется использовать hasOwnProperty для проверки свойств в ваших собственных объектах.

var noCatsAtAll = {}; 
    if ("constructor" in noCatsAtAll) 
     console.log("Yes, there definitely is a cat called 'constructor'."); 

    if ('constructor' in Object) 
     console.log("Yes, there is also a method called constructor"); 

    var noCon = Object.create(null); // create a completetly empty object 
    console.log('constructor' in noCon); // false 

    function hasConstructorToo() {} 

    console.log('constructor' in hasConstructorToo) // true 
    console.log('constructor' in []); // true 

http://jsfiddle.net/Xsb3E/3 `

Смежные вопросы