2016-03-02 80 views
1

为什么这回空操作对象的属性:分配方法来属性

var char = str.charAt(i); 
    char.isSpace = /\s/.test(char); 
    return char.isSpace; 

虽然这会返回一个有效的布尔?

var char = str.charAt(i); 
    var isSpace = /\s/.test(char); 
    return isSpace; 
+0

什么是'str'定义为? – millerbr

+0

显示全功能定义 – RomanPerekhrest

+0

@millerbr'str'被定义为一个字符串 @RomanPerekhrest我不明白为什么这与回答有关将方法分配给对象属性的理论问题有关。 – Andrew

回答

3
var char = str.charAt(i); 
// after this assignment char is a string (but not String Object) 
char.isSpace = /\s/.test(char); 
// 1. you can't assign a property to char, it's not an Object 
// 2. if you could, you weren't assigning a method to char, but a value 
return char.isSpace; 
// so, char.isSpace is undefined 

可以方法分配给String(静态)或String.prototype,如参见:

String.isWhitespace = function (str) {return /\s/g.test(str);} 
var char = str.charAt(i); 
String.isWhitespace(char); //=> true/false 

String.prototype.isWhitespace = function() {return /\s/g.test(str);} 
var char = str.charAt(i); 
char.isWhitespace(); //=> true/false 
+0

这是一个很好的答案!非常感谢!哇! – Andrew

+0

一个问题:为什么在'/ \/s /'之后的'g'? – Andrew

+0

您可以/也可能想要将它用于字符串:''我\ ncontain \ nwhitespace \ treally!'isWhitespace(); // => true'。在这种情况下'containsWhitespace'会是一个更好的方法名称;) – KooiInc