JavaScript функция называется объект с нижним регистром «о» - PullRequest
3 голосов
/ 03 ноября 2011

Я только что посмотрел вводную JavaScript лекцию от Дугласа Крокфорда, в которой он упоминает функцию с именем object, которая должна использоваться для создания нового объекта, связанного с объектом, в качестве его параметра.Я думаю, что он имеет в виду, что если я скажу

var objB = object(objA);

Внутренняя ссылка objB [[prototype]] установлена ​​на objA, хотя он явно не сформулировал это так.

С другой стороны, я прочитал его книгу , в которой он вообще не упоминает такую ​​функцию, а вместо этого представляет свой собственный способ создания объекта из прототипа,определяя следующую функцию:

Object.create = function(o) {
   var F = function() {};
   F.prototype = o;
   return new F();
}

По существу, пользуясь поведением оператора new, который устанавливает внутреннюю ссылку [[prototype]] вновь созданного объекта на то, на что указывает свойство prototype функции конструктора.

Мой вопрос: зачем ему опускать встроенную функцию и придумывать собственный способ сделать то же самое?Является ли предыдущий вызов функции object действительно эквивалентным

var objB = Object.create(objA);

Или есть небольшая разница?

Ответы [ 2 ]

3 голосов
/ 03 ноября 2011

Эти две функции одинаковы, и ни одна из них не встроена в JavaScript. См. Статью Крокфорда , объясняющую, почему он переключался между различными соглашениями об именах.

Правка из будущего: я видел этот старый ответ и хотел указать, что Object.create () действительно является родным (и очень важным) методом ES5.

1 голос
/ 03 ноября 2011

Разницы нет. А вот и «упрощенное» объяснение:

Дело в том, что все в javascript является объектом и наследуется от Object.

Также вы можете посмотреть на «функцию» как директиву, которая определяет новый тип объекта, фактически конструктор объекта, если вы используете новое ключевое слово. Если вы не используете новое ключевое слово и функцию вызова, как в примере ниже

function doSomething(){
  alert("works");
}

движок JavaScript создаст объект doSomething, который будет содержать свойство prototype, этот прототип является определенным типом объекта doSomething и содержит конструктор, который создается разработчиком javascript с кодом выше. Для встроенных функций или прототипов конструкторы имеют собственный код

...