Mik*_*sen 5 javascript prototype-programming
首先,这个问题不是 "构造函数属性做什么?" - 有很多关于它究竟是什么以及如何工作的良好文档:它是对创建对象的函数的引用(可以从其原型继承).
我更了解这个属性的常见用例.理论上它似乎都很好,但是什么时候你真的需要引用构造你的对象的函数?一些想法是:
instanceof
或
Object.prototype.toString()
代替.希望有些人可以使用构造函数引用的一些好的Javascript模式,或者提供有关属性存在的官方解释.
构造函数属性很方便(或者如果它可靠的话)的一种情况是函数需要知道它所传递的参数的类型,例如
function foo(arg) {
if ( /* if arg is an array */ ) {
// deal with array
} else if ( /* if arg is an object */ ) {
// deal with object
}
}
Run Code Online (Sandbox Code Playgroud)
如果上面的函数传递一个数组或对象,那么在两种情况下都typeof
将返回对象。可以使用构造函数属性:
if ( arg.constructor == Array )
Run Code Online (Sandbox Code Playgroud)
但是,如果数组是在与测试发生位置不同的框架中创建的(即,它的数组构造函数是测试范围内的数组函数的不同对象),则会失败。
因此,如果您排除框架(或范围存在问题的其他情况),那么构造函数属性就可以很好地用于此目的。
但这并不能解决构造函数属性可写(因此可以设置为任何内容)以及原型链非常简单的情况的一般问题。