2

我无法弄清楚自己为什么foo.bar在示例中是undefined,你能解释一下吗?

var foo = "foo";

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

Q2:如何向String实例添加对属性和方法的引用foo

感谢您的帮助,谢谢。

- 编辑 -

注意:问题是关于通用 String实例,而不是String 全局对象。因此,不能像有人建议的那样使用“经典”原型,因为这样每个 String 实例都会有一个名为 的属性bar,而我只想增加某些实例

4

6 回答 6

3

这是为什么我不能在 javascript 中向字符串对象添加属性的副本?.

基本上,您正在创建一个字符串,这是 javascript 中的原始类型。

您不能在 javascript 中向原始类型添​​加属性

于 2011-04-11T18:12:15.700 回答
2

foo.bar = "baz";是相同的undefined = "baz";

您可以使用它的原型将函数添加到字符串;

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

foo.bar() ; //# => baz
于 2011-04-11T18:12:10.647 回答
2

通过使用真正的 String 对象foo

var foo = new String('foo');
foo.bar = 'baz';
console.log(foo.bar); // 'baz'
于 2011-04-11T18:15:31.010 回答
1

当你指定 var foo = "foo"; 您要求将 foo 解释为字符串。字符串只能有文字作为值。它不能有任何其他子属性。(只需将此逻辑扩展到您知道的任何其他oo编程语言,它就会变得更加清晰)。相反,你可以做这样的事情。

 var fooObject = new Object()
fooObject.foo = "foo"
fooObject.bar = "baz"
于 2011-04-11T18:11:56.937 回答
0

您在谈论“原型设计”,即向 javascript 中的对象添加自定义属性的能力。

这是一个关于原型设计的优秀而简洁的教程: http ://www.javascriptkit.com/javatutors/proto.shtml

于 2011-04-11T18:13:01.147 回答
0

要扩展 String 类,请修改其原型:

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

在您的问题中,您正在修改 String 类的实例而不是 String 类本身。

于 2011-04-11T18:14:37.000 回答