2015-08-03 5 views
4

В настоящее время я участвую в процессе обучения JavaScript. У меня возникла путаница с объектами (тип ссылки и простые объекты). Вот некоторые коды, которые создают объект (ссылочный тип):Разница между объектами ссылочного типа JavaScript и обычными объектами

function TheObject(first, last) { 
    this.first = first; 
    this.last = last; 
} 

TheObject.prototype.theMethod = function() { 
    document.write("first : " + this.first + ", last : " + this.last + "</br>"); 
}; 

var anObject = new TheObject("Google", "Good"); 
anObject.theMethod(); 

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

var TheAnotherObject = function(first, last){ 
    return { 
    first : first, 
    last : last, 

    theMethod : function() { 
     document.write("first : " + this.first + ", last : " + this.last + "</br>"); 
    } 
    }; 
} 

var anotherObject = TheAnotherObject("Yahoo", "Good"); 
anotherObject.theMethod(); 

Теперь моя путаница где находится фактическая разница между двумя способами создания объектов. Я знаю, что я могу создать тип объекта в обоих направлениях (с ключевым словом «новое»). Тогда в чем разница?

Пожалуйста, помогите мне понять, в каком месте я здесь отсутствует. Я знаю, что это очень важно понять, поскольку JavaScript сильно использует функции и объекты. Любая помощь будет очень высоко ценится. Заранее спасибо.

+3

Второй метод не связывает прототип с 'TheObject' класса. – Barmar

+2

Я могу догадываться, но не знаю, что вы подразумеваете под «ссылочным типом» - где вы видели это выражение? –

+0

@torazaburo из книги «Начало Javascript» от «Jeremy McPeak». Я изучаю эту книгу. –

ответ

1

Основное отличие состоит в:

первый подход определяет theMethod метод с использованием prototype. Это означает, что все instances созданы из этого Class будут использовать такие же определение этого метода (theMethod)

В противном случае, второй подход определяет новый theMethod метод каждый раз, когда новый instance создается из этого Class. Который, очевидно, когда слишком много экземпляров будет стоить дорого, так как будет несколько определений для theMethod, делающих то же самое.

+0

* Если у вас слишком много экземпляров, это будет дорого *. На самом деле, это не дорого, если, возможно, вы планируете иметь миллионы экземпляров. В наши дни нам лучше беспокоиться, чем несколько лишних байтов памяти. Дуглас Крокфорд продвигает этот стиль программирования, насколько я понимаю. –

1

Когда дело касается создания, они одинаковы.

Однако разница в том, что первый способ, которым метод присваивается прототипу, означает, что существует только один экземпляр этого метода.

В то время как во втором примере метод определяется для каждого нового объекта.

Так в основном ссылки на theMethod не то же самое, что означает o1.theMethod! = O2.theMethod