Вопрос о свойствах и экземплярах Javascript - PullRequest
2 голосов
/ 11 апреля 2011

Я не могу понять, почему foo.bar в примере undefined, не могли бы вы объяснить?

var foo = "foo";

foo.bar = "baz";
console.log(foo.bar); // undefined

Q2: Как добавить ссылки на свойства и методы в String экземпляр foo?

Помощь приветствуется, спасибо.

- РЕДАКТИРОВАТЬ -

Примечание: вопрос о типовой строке экземпляр , а не глобальный объект String .Поэтому использование «классического» прототипирования, как кто-то предложил, не вариант, потому что таким образом каждый экземпляр String будет иметь свойство с именем bar, в то время как я хочу дополнить только определенные экземпляры .

Ответы [ 6 ]

3 голосов
/ 11 апреля 2011

Это дубликат Почему я не могу добавить свойства к строковому объекту в javascript? .

По сути, вы создаете строку, а это примитивный типв javascript.

Вы не можете добавить свойства к примитивным типам в javascript .

2 голосов
/ 11 апреля 2011

Используя реальный объект String для foo:

var foo = new String('foo');
foo.bar = 'baz';
console.log(foo.bar); // 'baz'
2 голосов
/ 11 апреля 2011

foo.bar = "baz"; совпадает с undefined = "baz";

Вы можете добавлять функции в строку, используя ее прототип;

String.prototype.bar = function() {
    return "baz";
};

foo.bar() ; //# => baz
1 голос
/ 11 апреля 2011

Когда вы указали var foo = "foo"; Вы просите, чтобы foo интерпретировался как строка. Строка может иметь только литерал в качестве значения. У него не может быть никаких других вложенных свойств. (просто распространите эту логику на любой другой язык программирования, который вы знаете, и он станет более понятным). Вместо этого вы можете сделать что-то вроде этого.

 var fooObject = new Object()
fooObject.foo = "foo"
fooObject.bar = "baz"
0 голосов
/ 11 апреля 2011

Чтобы расширить класс String, измените его прототип:

String.prototype.bar = "baz";
var foo = "foo";
console.log(foo); // "foo"
console.log(foo.bar); // "baz"

В вашем вопросе вы модифицировали экземпляр класса String вместо самого класса String.

0 голосов
/ 11 апреля 2011

Вы говорите о «прототипировании», которое заключается в возможности добавления пользовательских свойств к объектам в javascript.

Это превосходное и краткое руководство по созданию прототипов: http://www.javascriptkit.com/javatutors/proto.shtml

...