我知道,JavaScript中的函数具有双重生命,首先是函数(作为创建实例的第一类事物),第二个是普通对象。
但我惊讶地看到以下控制台的输出。
function A() {
console.info("A");
}
console.info(A.prototype.constructor === A.constructor); // false我期望它是真的,因为我没有期望对象A上的A属性是它自己的属性。因此,按照原型链查找,它应该是与A.prototype.constructor相同的对象。我哪里错了,或者我遗漏了什么?
发布于 2015-04-24 12:22:20
我哪里错了,或者我遗漏了什么?
A不从A.prototype继承。A是(构造函数)函数,它是从Function.prototype继承的。做console.log(Object.getPrototypeOf(A)) :-)
从A.prototype中只有new A实例继承(其.constructor为A)。另见VS.JavaScript中的原型。
发布于 2015-04-24 12:14:32
也就是说,因为两者都返回不同的值。
函数构造函数创建一个新的函数对象。在JavaScript中,每个函数实际上都是一个函数对象。
此外,如果您在上面的代码中提供控制台,您将看到
console.info(A.prototype.constructor);输出
function A() {
console.info("A");
}console.info(A.constructor);输出
function Function() { [native code] } // both are different.https://stackoverflow.com/questions/29846423
复制相似问题