Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于Javascript属性和实例的问题_Javascript_Oop_Methods_Properties_Instances - Fatal编程技术网

关于Javascript属性和实例的问题

关于Javascript属性和实例的问题,javascript,oop,methods,properties,instances,Javascript,Oop,Methods,Properties,Instances,我自己也弄不明白为什么示例中的foo.bar是未定义的,你能解释一下吗 var foo = "foo"; foo.bar = "baz"; console.log(foo.bar); // undefined 问题2:如何将对属性和方法的引用添加到String实例foo 谢谢你的帮助 --编辑-- 注意:问题是关于泛型字符串实例,而不是。因此,按照某人的建议使用“经典”原型不是一个选项,因为这样每个字符串实例都会有一个名为bar的属性,而我只想增加某些实例。当您指定var foo=“foo”

我自己也弄不明白为什么示例中的
foo.bar
未定义的
,你能解释一下吗

var foo = "foo";

foo.bar = "baz";
console.log(foo.bar); // undefined
问题2:如何将对属性和方法的引用添加到
String
实例
foo

谢谢你的帮助

--编辑--


注意:问题是关于泛型字符串实例,而不是。因此,按照某人的建议使用“经典”原型不是一个选项,因为这样每个字符串实例都会有一个名为
bar
的属性,而我只想增加某些实例。

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

 var fooObject = new Object()
fooObject.foo = "foo"
fooObject.bar = "baz"
foo.bar=“baz”
undefined=“baz”相同

您可以使用字符串的原型向其添加函数

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

foo.bar() ; //# => baz
这是一个复制品

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

您不能向javascript中的基元类型添加属性

您所说的“原型化”,即向javascript中的对象添加自定义属性的能力

这是一个关于原型设计的优秀且简明的教程:
要扩展String类,请修改其原型:

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

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

通过为
foo
使用真实的String对象:

var foo = new String('foo');
foo.bar = 'baz';
console.log(foo.bar); // 'baz'

可能是+1的复制品在rhino中测试了这一点,并且有效。尽管
's'==新字符串('s')
的计算结果为false,因为它们的类型不同。这是我能想象的引起bug的事情。我不知道bug,我认为如果它使用不当,可能会引起bug。但是,嘿,所有的代码都是这样的,不是吗?无论如何,这一切都是可行的,但我必须说,我从未发现这种字符串扩展有多大用处。