Как я могу добавить функции в конструктор объекта, используя Object.prototype? - PullRequest
1 голос
/ 12 декабря 2011

В эти дни я работал с этими сценариями, и после нескольких исследований я все еще не мог найти ответ.

Так вот в чем проблема, я хочу (например) добавить функцию в объект (например, .length (), поскольку у натива этого пока нет), я попробовал:

Object.prototype.length = function() { /* Some fancy work */ }; //It works!

Object.prototype["width"] = function() { /* Some fancy work */ }; //It works!

/* But the following DOESN'T work */
Object.prototype = {
    length: function() { /* Some fancy work */ },
    width: function() { /* Some other fancy work */ }
};

Последний не работает, и это самый короткий способ добавить функцию, используя объект {}, вот почему, я понятия не имею, почему. Я сталкивался с этим кодом (например, из jQuery 1.7.1), я пытался выяснить, как он работает, но у меня не работает. Я думаю, что это должно работать как-то, поскольку jQuery использует его, не могли бы вы показать мне, как?

Я видел много людей, использующих этот код:

a = {
    b: "Something",
    c: function() {}
}

А другие используют:

a.prototype = {
    b: "Something",
    c: function() {}
}

Так в чем же разница? Это как-то связано с первым вопросом, поэтому мне очень нравится его полностью понимать.

1 Ответ

1 голос
/ 12 декабря 2011

1) Вы не можете использовать

Object.prototype = {
    length: function() { /* Some fancy work */ },
    width: function() { /* Some other fancy work */ }
};

потому что вы пытаетесь заменить всю встроенную функциональность объекта только двумя методами. Это сломает всю систему.

2) Object.method() является аналогом статических методов в других языках. Он принадлежит псевдоклассу, а не каждому его экземпляру. В то же время Object.prototype.method является аналогом для обычного метода или поля. Это может быть доступ только с использованием экземпляра.

3) Автоматическая функция, которая будет запускаться при создании объекта, - Object. Вы не можете изменить, так как это встроенный объект.

...