在 JavaScript 中,函数可以被用作一般的函数或者构造函数。但是,在处理对象时,我们需要知道函数是否被称为构造函数。
函数和构造函数
在 JavaScript 中,函数既可以被用作一般的函数,也可以被用作构造函数。一般函数执行完毕后,返回一个值给调用者;而构造函数则通过 new
关键字来创建一个新的对象。
function myFunc() { console.log('myFunc called'); } const myObj = new myFunc(); // 创建一个新对象 myFunc(); // 输出 'myFunc called'
在上面的代码中,myFunc()
被用作一般函数和构造函数。第一个 myFunc()
是一般函数,只输出了一行日志信息;而第二个 myFunc()
则没有创建新对象。
检测函数是否被称为构造函数很简单,只需要使用 instanceof
运算符即可。
instanceof
运算符用于检测某个对象是否为某个类的实例。在 JavaScript 中,函数也是对象,因此可以使用 instanceof
运算符来检测函数是否被称为构造函数。
function myFunc() {} console.log(myFunc instanceof Function); // true console.log(myFunc instanceof Object); // true
在上面的代码中,myFunc
是一个函数,它同时也是 Function
类的实例和 Object
类的实例。因此,上面两个 console.log()
都会输出 true
。
如果一个函数被用作构造函数,则它也是 Object
类的实例。
function MyClass() {} const myObj = new MyClass(); console.log(myObj instanceof MyClass); // true console.log(myObj instanceof Function); // false console.log(myObj instanceof Object); // true
在上面的代码中,MyClass
是一个构造函数,它创建了一个新的对象 myObj
。myObj
是 MyClass
类的实例,同时也是 Object
类的实例。因为 myObj
不是函数,所以 myObj instanceof Function
输出 false
。
总结
在 JavaScript 中,函数可以被用作一般的函数或者构造函数。使用 instanceof
运算符,我们可以轻松地检测函数是否被称为构造函数。如果一个函数被用作构造函数,则它也是 Object
类的实例。
示例代码
-- -------------------- ---- ------- -------- ------------------- - ------ ------- -- -------------- -- -------------------------- --- ------ - -------- --------- -- ------------------------------------ -- ---- ------------------------------------ ----- -- ----- ---------------------------- -- ----- -- ----- --------------------------------- -- ----- -------------------------------------- -- -----
在上面的示例代码中,我们定义了一个 isConstructor()
函数来检测函数是否被称为构造函数。如果一个函数有 prototype
属性,并且 prototype.constructor
等于该函数,则该函数被视为构造函数。我们可以通过传递不同的函数来测试 isConstructor()
函数的效果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/11152