Добавить метод в строковый класс

Я хотел бы сказать что-то подобное в javascript:

   "a".distance("b")

Как я могу добавить свою собственную функцию расстояния в класс строк?

Ответ 1

Вы можете расширить прототип String;

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        alert(char + " does not appear in " + this);
    } else {
        alert(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

... и использовать его так:

"Hello".distance("H");

Смотрите здесь JSFiddle.

Ответ 2

String.prototype.distance = function( arg ) {
    // code
};

Ответ 3

Вы можете сделать это:

String.prototype.distance = function (){ 
    //your code 
}

Ответ 4

Использование прототипа для добавления вашей собственной функции в строку называется прототипом. Я создал небольшой код JavaScript, который может выбирать элементы и изменять его innerHTML

var dom; //you can replce this to be $ just like jQuery
dom = function(elm) {
if(typeof elm === "object") {
   // already done example 
   //typeof document.getElementById('id') will be object
   return [elm];
 } else {
    return document.querySelectorAll(elm);
 }
} // Returns elements by all css selector eg
// .class #id id p id > p id ~ p in short any css selectors 
 Object.prototype.text = function(txt) {  //object prototype as NodeList returned would be object or maybe displayed as [Object NodeList]
     var i = 0; //loop through the elements 
     for(i; i < this.length; i++) {
        this[i].innerHTML = txt;
      }
 // in this function this refers to object that this function is passed on
 };
 dom('.classh').text('Changed for elements with classh');
 dom('#heading').text('Changed for elements with id heading'); //examples

Ответ 5

Минимальный пример:

Нет из них не упоминается valueOf.

==================================================

String.prototype.
OPERATES_ON_COPY_OF_STRING = function ( 
    ARGUMENT 
){

    //:Get primitive copy of string:
    var str = this.valueOf();

    //:Append Characters To End:
    str = str + ARGUMENT;

    //:Return modified copy:
    return( str );
};

var a = "[Whatever]";
var b = a.OPERATES_ON_COPY_OF_STRING("[Hi]");
console.log( a ); //: [Whatever]
console.log( b ); //: [Whatever][Hi]

==================================================

Судя по моим исследованиям, нет возможности редактировать строку на месте.

Даже если вы используете строковый объект вместо строкового примитива.

Ниже НЕ работает и получается действительно странные результаты в отладчике.

==================================================

String.prototype.
EDIT_IN_PLACE_DOES_NOT_WORK = function ( 
    ARGUMENT 
){

    //:Get string object:
    var str = this;

    //:Append Characters To End:
    var LN = str.length;
    for( var i = 0; i < ARGUMENT.length; i++){
        str[LN+i] = ARGUMENT[ i ];
    };

};

var c = new String( "[Hello]" );
console.log( c );
c.EDIT_IN_PLACE_DOES_NOT_WORK("[World]");
console.log( c );

==================================================