JS 高级技巧

安全类型检查

typeof 检测类型机制并非完全可靠,所以直接使用 Object.prototype.toString.call(val)


作用域安全的构造函数

  • 构造函数其实就是一个使用的了new操作符调用的函数, 当使用了new操作符时候,构造函数内部用到的this都指向了新创建的对象实例。
  • 如果不使用new操作符直接调用定义的构造函数,那么this就指向了window, 这是由于js的晚绑定造成的

    所谓 绑定(binding),即把对象的接口与对象实例结合在一起的方法。
    早绑定(early binding)是指在实例化对象之前定义它的属性和方法,这样编译器或解释程序就能够提前转换机器代码。在 Java 和 Visual Basic 这样的语言中,有了早绑定,就可以在开发环境中使用 IntelliSense(即给开发者提供对象中属性和方法列表的功能)。ECMAScript 不是强类型语言,所以不支持早绑定。
    另一方面,晚绑定(late binding)指的是编译器或解释程序在运行前,不知道对象的类型。使用晚绑定,无需检查对象的类型,只需检查对象是否支持属性和方法即可。ECMAScript 中的所有变量都采用晚绑定方法。这样就允许执行大量的对象操作,而无任何惩罚。

function Person (name) {
  if(this instanceof Person) { //检查this对象是Person的一个实例
      this.name = name;
   } else {
      return new Person (name)
  }
}

推荐阅读更多精彩内容