Это не настройка для шутки, я действительно спрашиваю.
Дуглас Крокфорд любит говорить, что в прототипном объектно-ориентированном языке javascript нет необходимости в new
.
Он объясняет, что new
был просто добавлен, чтобы дать людям, исходящим из класса (на основе классического) объектно-ориентированного программирования, некоторый уровень комфорта:
JavaScript, We Hardly
new
ЯJavaScript - это прототипный язык, но он имеет оператор
new
, который пытается сделать его похожим на классический язык. Это, как правило, путает программистов, что приводит к некоторым проблемным шаблонам программирования.Вам не нужно использовать
new Object()
в JavaScript. Вместо этого используйте литерал объекта{}
.
Хорошо, отлично:
-
new
bad -
{}
good
Но затем комментатор Vítor De Araújo отметил, что эти два не совпадают. Он приводит пример, показывающий, что string
не похож на object
:
Строковый объект и строковое значение - это не одно и то же:
js> p = "Foo" Foo js> p.weight = 42 42 js> p.weight // Returns undefined js> q = new String("Foo") Foo js> q.weight = 42 42 js> q.weight 42
Строковое значение не может иметь новых свойств. То же самое справедливо и для других типов.
Что здесь происходит, если string
не является object
? Я запутываю javascript с некоторыми другими языками, где все является объектом?