之前我看过这段代码,但我不知道其含义是什么:
var person1 = {
toLocaleString : function(){
return "Nikolaos";
},
toString : function(){
return "Nicholas";
}
}
var person2 = {
toLocaleString : function(){
return "bum";
},
toString : function(){
return "Greg";
}
}
var people = [person1, person2];
alert(people.toString());
alert(people.toLocaleString());
该函数是否使用toLocaleString和toString?或??方法创建对象?
答案 0 :(得分:4)
该代码正在做三件事:
Object
原型继承的两个标准函数。让我们分解一下。
1)对象文字符号:
var obj = {propName: propValue};
在这种情况下,{
和}
表示对象文字。在对象文字中,您可以编写propName: propValue
以将propValue
分配给对象上名为propName
的属性。这与:
var obj = {}; // Get an empty object
obj.propName = propValue; // Add a property to it
您可以使用逗号分隔多个属性。例如:
var obj = {
author: "Douglas Adams",
title: "The Hitchhiker's Guide to the Galaxy",
answer: 42
};
创建一个具有三个属性的对象,其中两个具有字符串值,另一个具有数字值。
请注意,右侧的处理方式与赋值一样,因此可以出现在赋值语句右侧的任何内容:
var x = "bar";
var obj = {
three: 1 + 2,
fubar: "foo " + x
};
如果您愿意,可以将属性名称放在引号中:
var x = "bar";
var obj = {
"three": 1 + 2,
"fubar": "foo " + x
};
...这对于指定具有保留令牌(如“if”或“return”)或以前保留的令牌(如“class”)的属性很方便,如果它们是语法错误的话没有引号。
2)现在让我们看一下函数表达式:
var f = function() { /* your code here */ };
这是一个函数表达式。它创建一个新函数,并将其引用赋给变量f
。您可以致电f()
来调用它。
var f = function(name) {
alert("Hi " + name);
};
f("Fred"); // alerts "Hi Fred"
1 + 2)所以将它与对象文字表示法放在一起:
var obj = {
foo: function(name) {
alert("Hi " + name);
}
};
obj.foo("Fred"); // alerts "Hi Fred"
(我不喜欢匿名函数,I prefer my functions to have names,但这是另一个话题。)
3)最后:正如maerics指出的那样,该代码中使用的特定函数是toString
和toLocaleString
,它们都是JavaScript对象的标准函数。这意味着那些覆盖标准版本,因此每当调用标准函数时都会返回给定的值。
答案 1 :(得分:1)
specification of the language为所有JavaScript对象实现了toString()
和toLocaleString()
方法。因此,数组(例如存储在“people”变量中的数组)似乎分别通过返回每个元素的字符串或“locale string”值来实现这些方法(至少在我们正在测试的Web浏览器中)。 / p>
也就是说,必须使用以下内容实现Array类toString
和toLocaleString
方法:
Array.prototype.toString = function() {
var a = [];
for (var i=0; i<this.length; i++) {
a[i] = this[i].toString(); // Note "toString".
}
return a.join(",");
}
Array.prototype.toLocaleString = function() {
var a = [];
for (var i=0; i<this.length; i++) {
a[i] = this[i].toLocaleString(); // Note "toLocaleString".
}
return a.join(",");
}