从技术角度来说,函数实际上没有被复制,复制的是函数引用。
AI时代,有人焦虑失业,有人偷偷变强,不写代码不烧脑~
感受一句话的力量
AI时代,有人焦虑失业,有人偷偷变强,不写代码不烧脑~
从技术角度来说,函数实际上没有被复制,复制的是函数引用。
继承意味着复制操作,JavaScript(默认)并不会复制对象属性。相反,JavaScript会在两个对象之间创建一个关联,这样一个对象就可以通过委托访问另一个对象的属性和函数。
多态的另一个方面是,在继承链的不同层次中一个方法名可以被多次定义,当调用方法时会自动选择合适的定义。
实例化(instantiation)、继承(inheritance)和(相对)多态(polymorphism)。
硬绑定会大大降低函数的灵活性,使用硬绑定之后就无法使用隐式绑定或者显式绑定来修改this。
在任意代码片段外部添加包装函数,可以将内部的变量和函数定义“隐藏”起来,外部作用域无法访问包装函数内部的任何内容。
匿名函数没有name标识符,这会导致:1.调试栈更难追踪;2.自我引用(递归、事件(解除)绑定,等等)更难;3.代码(稍微)更难理解。
从语法角度来说,instanceof似乎是检查a1和Foo的关系,但是实际上它想说的是a1和Foo.prototype(引用的对象)是互相关联的。
构造形式和文字形式生成的对象是一样的。唯一的区别是,在文字声明中你可以添加多个键/值对,但是在构造形式中你必须逐个添加属性。
LHS和RHS的含义是“赋值操作的左侧或右侧”并不一定意味着就是“=赋值操作符的左侧或右侧”。赋值操作还有其他几种形式,因此在概念上最好将其理解为“赋值操作的目标是谁(LHS)”以及“谁是赋值操作的源头(RHS)”。
尽管我曾经一度非常热爱制作东西,但是现在却更渴望了解事物的运行原理。我经常寻找解决问题或修复bug的最佳方法,却很少花时间来研究我所使用的工具。
ReferenceError同作用域判别失败相关,而TypeError则代表作用域判别成功了,但是对结果的操作是非法或不合理的。
对象关联可以更好地支持关注分离(separationofconcerns)原则,创建和初始化并不需要合并为一个步骤。
非常少有人会注意到JavaScript的ES3规范中规定try/catch的catch分句会创建一个块作用域,其中声明的变量仅在catch内部有效。
forEach(..)会遍历数组中的所有值并忽略回调函数的返回值。every(..)会一直运行直到回调函数返回false(或者“假”值),some(..)会一直运行直到回调函数返回true(或者“真”值)。
从技术角度来说,函数永远不会“属于”一个对象,所以把对象内部引用的函数称为“方法”似乎有点不妥。
内部委托比起直接委托可以让API接口设计更加清晰
变量的赋值操作会执行两个动作,首先编译器会在当前作用域中声明一个变量(如果之前没有声明过),然后在运行时引擎会在作用域中查找该变量,如果能够找到就会对它赋值。
ES6增加了可计算属性名,可以在文字形式中使用[]包裹一个表达式来当作属性名
使用new来调用函数,或者说发生构造函数调用时,会自动执行下面的操作。1.创建(或者说构造)一个全新的对象。2.这个新对象会被执行[[Prototype]]连接。3.这个新对象会绑定到函数调用的this。4.如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。