... имеет ли функция прототипа какие-либо цели, кроме как добиться механизма наследования?
Я предполагаю, что вы имеете в виду собственность prototype
объектов Function
. (В JavaScript нет функции «Прототип»).
Это зависит от того, что вы подразумеваете под «наследованием». Цель prototype
собственности на Function
случаях это указать объект, который будет назначен в качестве прототипа объектов, созданных с помощью этой функции в качестве конструктора, например:
var f = new Foo(); // Assigns `Foo.prototype` as `f`'s prototype
Таким образом, f
имеет доступ к свойствам, определенным этим прототипом. Если это то, что вы подразумеваете под наследованием, то да, это единственная цель для свойства prototype
для функций.
Обратите внимание, что теперь у нас есть ECMAScript5, вы можете назначить прототипы без использования функции конструктора, если вы предпочитаете, используя новый Object.create
:
var f = Object.create(somePrototype); // Assigns `somePrototype` as `f`'s prototype
Вот более конкретный пример и тех:
с помощью функции конструктора:
function Foo(name) {
this.name = name;
}
Foo.prototype.hey = function() {
console.log("Hi, I'm " + this.name);
};
var f = new Foo("Fred"); // Assigns `Foo.prototype` as `f`'s prototype
f.hey(); // Shows "Hi, I'm Fred" because `f` gets `hey` from its prototype
Использование Object.create
:
var fproto = {
hey: function() {
console.log("Hi, I'm " + this.name);
}
};
var f = Object.create(fproto); // Assigns `fproto` as `f`'s prototype
f.name = "Fred";
f.hey(); // Shows "Hi, I'm Fred" because `f` gets `hey` from its prototype
Так что, если вы предпочитаете использовать только Object.create
, и вы только с помощью ES5 с поддержкой двигателей, вы никогда не могли использовать Function#prototype
вообще, если вам нравится.
Есть ли причины использовать JavaScript, если у вас нет интереса к использованию JavaScript? – meagar
Я предполагаю, что здесь есть опечатка, учитывая ваш второй вопрос. – TheSeamau5
Вы имели в виду «наследование» вместо «JavaScript»? – Ryan