3

我知道“__proto__是一个对象的内部属性,指向它的原型”,所以在下面的例子中,我认为它c2.prototype等于c2.__proto__. 为什么它们没有相同的值?

<!DOCTYPE html>
<html>
    <head>
        <script type="text/javascript">
            window.onload = function() {
                var Circle = function(radius) {
                    this.radius = radius;
                    this.doubleRadius = function() {
                        return this.radius * 2;
                    }
                }

                var c1 = new Circle(4);

                Circle.prototype.area = function() {
                    return Math.PI*this.radius*this.radius;
                }

                var c2 = new Circle(5);

                console.log('--- first circle object, created before adding "area" method');
                console.log(c1.radius);
                console.log(c1.doubleRadius());
                console.log(c1.area());

                console.log('--- second circle object, created after adding "area" method');
                console.log(c2.radius);
                console.log(c2.doubleRadius());
                console.log(c2.area());

                console.log(c2.prototype); // undefined
                console.log(c2.__proto__); // Object { area=function() }

            }
        </script>
    </head>
<body>
</body>
</html>
4

3 回答 3

3

简单的答案是c2.constructor.prototype == c2.__proto__

构造函数有一个.prototype属性。实例没有,但它们确实有.__proto__.constructor属性

于 2012-06-14T22:12:42.530 回答
2

obj.__proto__是 的简短版本obj.constructor.prototype,而不是obj.prototype:

console.log(c2.constructor.prototype === c2.__proto__);   //true
console.log(c2.prototype === c2.__proto__);   //false
于 2012-06-07T08:01:24.910 回答
1

试试下面的。

console.log(c2.constructor.prototype);
console.log(c2.__proto__);

实际上,.__proto__==.constructor.prototype当 c2 是一个对象时。

于 2012-06-07T07:59:41.537 回答