本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.5节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看
构造函数从根本上说是用于创建预配置对象的饼干模具模板。以String()为例,这个函数在与new操作符[new String('foo') ]一起使用时会创建基于String()模板的字符串实例。让我们来看一个示例。
<!DOCTYPE html><html lang="en"><body><script> var myString = new String('foo'); console.log(myString); // 输出foo {0 = "f", 1 = "o", 2 = "o"} </script></body></html>上述代码创建了一个新的字符串对象,它是String()构造函数的一个实例。就像这样,我们在JavaScript中表达了一个字符串值。注意
我并不是建议使用构造函数,而不使用等价方式:字面量/原始值,如var string="foo";。但我建议,要理解字面量/原始值背后的内容。如前所述,JavaScript语言具有以下原生预定义的构造函数:Number()、String()、Boolean()、Object()、Array()、Function()、Date()、RegExp()和Error()。可以在任意一个构造函数上应用new操作符来实例化一个对象实例。如下代码,构建了这9类原生JavaScript对象。
<!DOCTYPE html><html lang="en"><body><script> // 使用new关键字实例化每个原生构造函数 var myNumber = new Number(23); var myString = new String('male'); var myBoolean = new Boolean(false); var myObject = new Object(); var myArray = new Array('foo', 'bar'); var myFunction = new Function("x", "y", "return x*y"); var myDate = new Date(); var myRegExp = new RegExp('\bt[a-z]+\b'); var myError = new Error('Crap!'); // 输出/验证哪个构造函数创建了该对象 console.log(myNumber.constructor); // 输出Number() console.log(myString.constructor); // 输出String() console.log(myBoolean.constructor); // 输出Boolean() console.log(myObject.constructor); // 输出Object() console.log(myArray.constructor); // 在现在的浏览器中,输出Array() console.log(myFunction.constructor); // 输出Function() console.log(myDate.constructor); // 输出Date() console.log(myRegExp.constructor); // 输出RegExp() console.log(myError.constructor); // 输出Error() </script></body></html>通过使用new操作符,告诉JavaScript解释器,我们需要一个对应于构造函数实例的对象。例如,在上述代码中,Date()构造函数用于创建日期对象。Date()构造函数是日期对象的饼干模具。也就是说,它从Date()构造函数定义的默认模式中生成了日期对象。
至此,大家应该熟悉从原生构造函数[例如new String(‘foo’)]和用户自定义构造函数[例如new Person(true, 33, ‘male’)]创建对象实例的方法了。注意
时刻记住,Math是一个静态对象——其他方法的容器,它不是使用new运算符的构造函数。
相关资源:敏捷开发V1.0.pptx