2015-12-28 2 views
0

В javascript мы можем определить прототип объекта по-разному.разница между различными способами определения объекта в javascript

Первого один

var foo={ 
a:1, 
b:2 
} 

Во-вторых

var foo=function(){ 
this.a=1; 
this.b=2; 
} 

, что я знаю, что первое на это сам, а для создания объекта из второго определения, мы должны использовать новый Foo объекта() , есть ли другие различия между этими двумя определениями. и если оба они одинаковы, то что нужно, а если нет, то что нужно в первую очередь?

+0

Связанный: [? Что такое 'новое' ключевое слово в JavaScript] (http://stackoverflow.com/q/1646698/710446) – apsillers

+0

Там больше способов, как [Object. создать] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create). – Teemu

ответ

1

Они не то же самое, второй является конструктор объекта:

var foo = { 
 
    a: 1, 
 
    b: 2 
 
} 
 
console.log("First: ", 
 
    typeof foo, // object 
 
    JSON.stringify(foo), // {a:1,b:2} 
 
    foo.constructor) // function Object() { [native code] } 
 

 
var foo = function() { 
 
    this.a = 1; 
 
    this.b = 2; 
 
} 
 
console.log("Second: ", 
 
    typeof foo, // function 
 
    JSON.stringify(foo), // undefined, foo is not an Object, it's a function! 
 
    foo.constructor) // function Object() { [native code] } 
 

 
var foo = new foo() 
 
console.log("Thrid: ", 
 
    typeof foo, // object 
 
    JSON.stringify(foo), // {a:1,b:2} 
 
    foo.constructor) // function() { this.a = 1; this.b = 2;}

Таким образом, даже после создания как объект, который вы будете иметь разностное в их атрибут .constructor. Поскольку первый объект был создан конструктором Native Object vor Object в JavaScript, а второй был создан вашим пользовательским конструктором.

Но вот единственный и разностное

+0

Я не говорю, что они такие же, но как только вы сделали новый foo() для второго определения, вы получаете объект. это различные способы определения поведения и свойства объекта. Я хочу знать, в чем разница между ними, почему нам нужен второй способ определения объекта. – Nitin9791

+1

@ Nitin9791 см. Объяснение после кода :) – CoderPi

+1

«* ... разница в атрибуте' .constructor'. * «- Что еще более важно, будет существовать различие в цепочках прототипов объектов! (например, 'foo.prototype.bar = 6' приведет к тому, что' bar' будет унаследованным свойством на всех экземплярах 'foo') (@ Nitin9791) – apsillers

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