有关Javascript属性和实例的问题

时间:2011-04-11 18:07:09

标签: javascript oop methods properties instances

我无法弄清楚为什么示例中的foo.barundefined,你能解释一下吗?

var foo = "foo";

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

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

感谢帮助,谢谢。

- 编辑 -

注意:问题是关于通用String 实例,而不是String global object。所以使用“经典”原型设计不是一个选项,因为这样每个String实例都会有一个名为bar的属性,而我只想扩充某些实例

6 个答案:

答案 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类本身。