Вопрос
Я пытаюсь лучше понять JavaScript. Итак, я купил книгу «JavaScript хорошие части» Дуглас Крокфорд. Р>
В данный момент у меня возникают трудности с захватом прототипа. Кажется, что все ниже работает в моем браузере, пока я не нажму // Пример PROTOTYPE. Может кто-то взглянуть на это, чтобы понять, почему я не могу получить какой-либо вывод из него. (Моя страница возвращается пустой, если я не закомментирую весь код прототипа)
Спасибо за любую помощь. Р>
Барри
var stooge = {
"first-name": "Jerome",
"last-name": "Howard",
"nickname": "J",
"profession" : 'Actor'
};
// below is augmenting
var st = stooge;
st.nickname = "curly";
// st.nickname and nick are the same because both are ref's to the same object
var nick = st.nickname;
document.writeln(stooge['first-name']); //expect Jerome -- this is "suffix" retrieval
document.writeln(st.nickname); //expect "curly" -- this is "notation" retrieval
document.writeln(nick); //expect "curly"
document.writeln(stooge.profession);
//PROTOTYPE EXAMPLE;
if (typeof Object.create !== 'function')
{
object.create = function(o) {
var F = function () {};
F.prototype = o;
return new F();
};
var another_stooge = Object.create(stooge);
another_stooge['first-name'] = 'Barry';
document.writeln(another_stooge['first-name']);
// the below should be inherited from the prototype therefore "Actor"
document.writeln(another_stooge.profession);
Решение
Вам не хватает закрывающей скобки в конце выражения функции, назначенного для object.create, а также вы не используете заглавные буквы Object в object.create = function (o) {
. р>
//PROTOTYPE EXAMPLE;
if (typeof Object.create !== 'function')
{
Object.create = function(o) { // <--- "Object" instead of "object"
var F = function () {};
F.prototype = o;
return new F();
};
} // <--- Closing brace was missing
Другие советы
Похоже, вам не хватает закрывающей скобки для строки object.create = function (o) {
.... Я вижу закрывающую скобку для оператора if и для var F = function () {};
, но не для function (o)
. Р>
Отсутствующая закрывающая скобка действительно подавит вывод, потому что Javascript будет предполагать все, прежде чем (отсутствующая) закрывающая скобка будет частью определения функции, а не чем-то, что должно быть выполнено (пока).