1

全部,如果我将一个对象传递给Object.create,这意味着创建一个从它继承的新对象。下面的代码证明了这一点。

        function Shape() {
          this.x = 0;
          this.y = 0;
        }

        Shape.prototype.move = function(x, y) {
            this.x += x;
            this.y += y;
            console.info("Shape moved.");
        };

        Rectangle = Object.create(Shape);
        Rectangle.__proto__==Shape;//it is true.yes, I can understand
        Rectangle//It is Function {} I can not understand it.
        Rectangle.constructor==Function//it is true.I can not understand it.

该图表示的关系如下。但我无法理解的是它的亮点部分。究竟是Rectangle什么?我的意思是什么是Function{},它来自哪里?还有Rectangle.constructor属性,不知道是不是所有的对象都有constructor属性,属性有什么constructor用?谢谢。

PS:以上数值都是在FireBug中计算和观察的。

在此处输入图像描述

通过 minitech 的评论更正图表

在此处输入图像描述

4

1 回答 1

2

这就是继承使用的Object.create工作原理。它应该看起来像这样:

function Shape() {
    this.x = 0;
    this.y = 0;
}

Shape.prototype.move = function(x, y) {
    this.x += x;
    this.y += y;
    console.info("Shape moved.");
};

function Rectangle() {
    Shape.call(this);
}

Rectangle.prototype = Object.create(Shape.prototype); // Leaving out the constructor business for simplicity

你在那里做的是复制实际的Shape函数,所以(作为一个函数)它的构造函数当然是Function.

PSRectangle.__proto__ = Shape不是比较。

于 2013-04-25T02:19:56.440 回答