JS中的原型和构造函数属性

时间:2012-03-03 08:34:15

标签: javascript constructor prototype

代码片段如下,任何人都可以解释为什么a.hasOwnProperty("prototype")是真的,其他的都是假的?这是否意味着函数有自己的原型,其他是继承自Object?如果是,为什么c.hasOwnProperty("prototype")是假的?此外,他们constructor财产的财产来自哪里?感谢

    var a = function () {
    };
    var b = new String("test");
    var c = {};

    console.log(a.hasOwnProperty("prototype"));//true
    console.log(b.hasOwnProperty("prototype"));//false
    console.log(c.hasOwnProperty("prototype"));//false
    console.log(a.hasOwnProperty("constructor"));//false
    console.log(b.hasOwnProperty("constructor"));//false
    console.log(c.hasOwnProperty("constructor"));//false
    console.log(a.constructor);//Function()
    console.log(b.constructor);//String()
    console.log(c.constructor);//Object()

1 个答案:

答案 0 :(得分:3)

prototype属性仅在构造函数上可用。 'a'是一个函数,因此有一个原型。 'b'和'c'是实例。他们没有原型,他们的构造者有原型:

console.log(a.constructor.hasOwnProperty("prototype")) // true
console.log(b.constructor.hasOwnProperty("prototype")) // true
console.log(c.constructor.hasOwnProperty("prototype")) // true