2016-03-02 88 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