10th week blog

一:object and constructor comprison

对象字面量运行速度更快,因为它们可以在解析的时候被优化:它们不需要"作用域解析(scope resolution)";因为存在我们创建了一个同名的构造函数Object()的可能,当我们调用Object()的时候,解析器需要顺着作用域链从当前作用域开始查找,如果在当前作用域找到了名为Object()的函数就执行,如果没找到,就继续顺着作用域链往上照,直到找到全局Object()构造函数为止

  • Object()构造函数可以接收参数,通过这个参数可以把对象实例的创建过程委托给另一个内置构造函数,并返回另外一个对象实例,而这往往不是你想要的。所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

    在一个类中只能有一个名为 “constructor” 的特殊方法。 一个类中出现多次构造函数 (constructor)方法将会抛出一个 SyntaxError 错误。

    在一个构造方法中可以使用super关键字来调用一个父类的构造方法。

    如果没有显式指定构造方法,则会添加默认的 constructor 方法。

    如果不指定一个构造函数(constructor)方法, 则使用一个默认的构造函数(constructor)。

  • 实例:
  • class Square extends Polygon { constructor(length) { // 在这里, 它调用了父类的构造函数, 并将 lengths 提供给 Polygon 的"width"和"height" super(length, length); // 注意: 在派生类中, 必须先调用 super() 才能使用 "this"。 // 忽略这个,将会导致一个引用错误。 this.name = 'Square'; } get area() { return this.height * this.width; } set area(value) { // 注意:不可使用 this.area = value // 否则会导致循环call setter方法导致爆栈 this._area = value; }
  • 二:什么时候用arrange fuction:

功能

编辑
返回一个包含 数组 Variant
功能:
Array( arglist )  所需的 arglist 参数是一个用逗号隔开的值表,这些值用于给 Variant 所包含的数组的各元素赋值。如果不提供参数,则创建一个长度为 0 的数组。
语法:
用来表示 数组元素的符号由变量名、圆括号以及括号中的所需元素的索引号组成。在下面的示例中,第一条 语句创建一个  Variant 的变量 A。第二条语句将一个数组赋给变量 A。最后一条语句将该数组的第二个元素的值赋给另一个变量。
Dim A As VariantA = Array(10,20,30)B = A(2)使用  Array 函数创建的数组的下界受 Option Base 语句指定的下界的决定, 除非 Array 是由类型库(例如 VBA.Array )名称限定。如果是由类型库名称限定,则 Array 不受 Option Base 的影响。
注意  没有作为数组声明的 Variant 也可以表示数组。
除了长度固定的字符串以及用户定义类型之外, Variant 变量可以表示任何类型的数组。尽管一个包含数组的  Variant 和一个元素为 Variant 类型的数组在概念上有所不同,但对数组元素的访问方式是相同的。
四:scope closure:

2、scope及变量查询

  作用域,也就是我们常说的词法作用域,说简单点就是你的程序存放变量、变量值和函数的地方。

  块级作用域

  如果你接触过块级作用域,那么你应该非常熟悉块级作用域。简单说来就是,花括号{}括起来的代码共享一块作用域,里面的变量都对内或者内部级联的块级作用域可见。

  基于函数的作用域

  在JavaScript中,作用域是基于函数来界定的。也就是说属于一个函数内部的代码,函数内部以及内部嵌套的代码都可以访问函数的变量。

无论函数是在哪里调用,也无论函数是如何调用的,其确定的词法作用域永远都是在函数被声明的时候确定下来的。理解这一点非常重要。

 

猜你喜欢

转载自www.cnblogs.com/wdyg/p/9942033.html