Предложение «В JavaScript, ALMOST all - это объект» является правильным, потому что MAIN-коды (объекты, функции, массивы) являются объектами JavaScript. Код JavaScript использует 9 разных единиц плюс 1 (несколько): - 01. array - 02. boolean - 03. function - 04. null - 05. number - 06. object - 07. regexp - 08. string - 09. undefined - 10. multiple
НО JavaScript-объекты: - НЕ являются теми же существами, что и «объекты» на других объектно-ориентированных языках. - они представляют собой набор пар имен-значений. - у всех есть функция создания (его конструктор). - все INHERIT являются членами прототипа-объекта его конструктора, и это его прототип. - все функции являются объектами, но не все объекты являются функциями. - функции имеют область, объекты НЕ (дефект дизайна, на мой взгляд). - Объект, функция, массив, строка, ... с первым CAPITAL - это функции !!! - важнее различия в объектах и функциях JS, чем его общие черты. - имя «экземпляр» в JS имеет разное значение с именем «экземпляр» в теории знаний, где экземпляр наследует атрибуты его общей концепции. В JS обозначается только его конструктор. JavaScript получил имя «экземпляр» из класса «наследование на основе класса» ool (java), где это подходящее имя, потому что эти объекты наследуют атрибуты классов.
JS-функции ARE JS-объекты, потому что: 1) они могут иметь такие элементы, как JS-объекты:
> function f(){} undefined > f.s = "a string" "a string" > f.s "a string"
2) у них есть конструктор-функция, как и все JS-объекты, функция Function:
> (function f(){}) instanceof Function true
3) как все JS-объекты, их прототип-объект совпадает с его конструктором прототип:
> (function f(){}).__proto__ === Function.prototype true > ({}).__proto__ === Object.prototype true > (new Object).__proto__ === Object.prototype true
4), конечно, JS-функции как СПЕЦИФИЧЕСКИЕ JS-объекты имеют и дополнительные атрибуты, как и все функции в языках программирования, что JS-объекты не имеют, как вы можете звонить ( выполнить) их с информацией ввода и вывода.
ВСЕ НЕ является объектом, потому что, например, мы НЕ можем добавлять членов в литеральную строку:
> var s = "string" undefined > s.s2 = "s2string" "s2string" > s.s2 undefined