在一个受欢迎的博客中,作者向他的听众询问他们对JavaScript的"啊哈!"时刻是什么,大多数人都说他们意识到JavaScript中的所有内容都是一个对象.但对于JS和编程新手来说,我并不完全明白这意味着什么.它不像它与实际的JS对象相关 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
或者它呢?
如果不能,请解释"JavaScript中的所有内容都是对象"的含义.
或者一般都是OO编程,阅读这个主题有助于理解它?你能推荐一下这个主题吗?
他们最有可能的意思是,任何可以分配给变量的数据都具有可以在时尚对象中访问的属性(以及方法).
// strings
"asdf".length; // 4
"asdf".replace('f', 'zxc'); // "azxc"
// numbers
(10).toFixed(2); // "10.00"
// booleans
true.someProp; // undefined (point is it doesn't crash)
Run Code Online (Sandbox Code Playgroud)
他们甚至拥有他们继承的原型.
"omg".constructor; // function String() { [native code] }
String.prototype.snazzify = function() {
return "*!*!*" + this + "*!*!*";
};
"omg".snazzify(); // "*!*!*omg*!*!*"
Run Code Online (Sandbox Code Playgroud)
然而,这些是原始的,虽然它们在很多方面表现出对象,但它们在某些方面与其他"真正的"JS对象不同.其中最大的一点是它们是不可改变的.
var s = "qwerty";
s.foo; // undefined, but does not crash
s.foo = 'some val'; // try to add a property to the string
s.foo; // still undefined, you cannot modify a primitive
Run Code Online (Sandbox Code Playgroud)
请注意,功能是真正的可变对象.
var fn = function(){};
fn.foo; // undefined
fn.foo = 'some val'; // try to add a property to the function
fn.foo; // "some val"
Run Code Online (Sandbox Code Playgroud)
因此,虽然"JS中的所有内容都是对象"在技术上并不正确,但在大多数情况下,您可以将它们视为对象,因为它们具有属性和方法,并且可以进行扩展.请务必了解警告.
回到第一原则.
什么是对象?它是一个软件组件,它将状态和行为一起封装到内存中的单个实体中.
根据该定义,您可以看到所有内容都可以被视为对象.函数式程序员将函数作为第一类对象.数据人员会说数据,即使是没有行为的数据,也可以被视为一个对象(虽然不是很聪明).
我没有看到这种变化.
JavaScript将函数视为对象.
我不确定这种见解会对你的编程产生什么影响.