我无法弄清楚为什么示例中的foo.bar
为undefined
,你能解释一下吗?
var foo = "foo";
foo.bar = "baz";
console.log(foo.bar); // undefined
Q2:如何向String
实例foo
添加对属性和方法的引用?
感谢帮助,谢谢。
- 编辑 -
注意:问题是关于通用String 实例,而不是String global object。所以使用“经典”原型设计不是一个选项,因为这样每个String实例都会有一个名为bar
的属性,而我只想扩充某些实例。
答案 0 :(得分:3)
这是Why can't I add properties to a string object in javascript?的副本。
基本上,你正在创建一个字符串,这是javascript中的原始类型。
您无法在javascript中添加基本类型的属性。
答案 1 :(得分:2)
foo.bar = "baz";
与undefined = "baz";
您可以使用原型添加函数到字符串;
String.prototype.bar = function() {
return "baz";
};
foo.bar() ; //# => baz
答案 2 :(得分:2)
为foo
使用真正的String对象:
var foo = new String('foo');
foo.bar = 'baz';
console.log(foo.bar); // 'baz'
答案 3 :(得分:1)
当你指定var foo =“foo”时;你要求foo被解释为一个字符串。 String只能将文字作为值。它不能有任何其他子属性。 (只需将此逻辑扩展到您知道的任何其他oo编程语言,它将变得更加清晰)。相反,你可以做这样的事情。
var fooObject = new Object()
fooObject.foo = "foo"
fooObject.bar = "baz"
答案 4 :(得分:0)
您正在谈论“原型设计”,即能够在javascript中向对象添加自定义属性。
这是关于原型设计的优秀而简洁的教程: http://www.javascriptkit.com/javatutors/proto.shtml
答案 5 :(得分:0)
要扩展String类,请修改其原型:
String.prototype.bar = "baz";
var foo = "foo";
console.log(foo); // "foo"
console.log(foo.bar); // "baz"
在您的问题中,您正在修改String类的实例而不是String类本身。