2016-03-02 2 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' определяется как строка @RomanPrekhrest Я не понимаю, почему это имеет отношение к теоретическому вопросу о назначении методам свойств объекта. – 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, e.q .:

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

один вопрос: почему 'g' после'/\/s/'? – Andrew

+0

Вы также можете использовать его для строк: '' I \ ncontain \ nwhitespace \ treally! '. IsWhitespace(); // => true'. В этом случае 'containsWhitespace' будет лучшим именем метода;) – KooiInc

Смежные вопросы