2016-04-08 31 views
0

Kod feryatına bir göz atın, bu oldukça açıklayıcı. İstenen sonuçları almak için 'replaceAt' işlevini nasıl değiştirebilirim?Simple Extending Native JS

String.prototype.replaceAt = function (at) { 
    return this.substring(0, at) + this.substring(at+1, this.length); 
} 

var str = "webmaster"; 

var x = str.replaceAt(2); 
console.log(x); // should return "b" 
console.log(str); // should return "wemaster" 
+0

Kodunuzun nasıl çalışmadığını anlatabilir misiniz? Ne bekliyordun ve aslında ne oldu? İstisnaınız varsa, gerçekleştiği satırı ve istisna ayrıntılarını gönderin. Lütfen bu ayrıntıları içeri [düzenle] veya yardım edemeyebiliriz. –

+0

Son iki satırdaki yorumlara bakın. – Ivannnnn

+0

Bize _expect_ hakkında ne verdin, ama sonra ne _happened_? –

cevap

4

Yapamazsınız, dizeler değişmezdir.

Başka bir yaklaşım, değiştirilen karakteri ve yeni dizeyi içeren bir nesneyi veya diziyi döndürmek olabilir. , ES6 özelliğini 'strüktür' kullanan Ancak

String.prototype.replaceAt = function (at) { 
    return { 
     x: this.substring(at+1, at), 
     str: this.substring(0, at) + this.substring(at+1, this.length) 
    } 
}; 

var str = "webmaster"; 
var result = str.replaceAt(2); 
var x = result.x; 
str = result.str; 

console.log(x); 
console.log(str); 

sen aslında bir Oneliner için aşağı getirebilir: Sonra sırasıyla değişkenler 'x' ve 'str' değerler atar

String.prototype.replaceAt = function (at) { 
    return [ 
     this.substring(at+1, at), 
     this.substring(0, at) + this.substring(at+1, this.length) 
    ] 
}; 

var str = "webmaster"; 
[x, str] = str.replaceAt(2); 

console.log(x); 
console.log(str); 
+0

Yerel js işlevi vardiyası nasıl benzer bir şey yapabilir: var meyveler = ["Muz", "Turuncu", "Elma", "Mango"]; var x = fruits.shift(); console.log (fruits); // ["Turuncu", "Elma", "Mango"] döndürür console.log (x); // 'Banana' döndürür – Ivannnnn

+0

Bunun nedeni bir dizinin değiştirilebilmesidir. Bir diziyi bir işleve geçirebilir ve değiştirebilirsiniz (ekleme, silme, vb.). Bu, aynı zamanda bu dizinin aynı örneği olduğu için, işlevin dışında diziyi de güncelleyecektir. Dizeler, sabit değildir, karakterleri buradan kaldıramazsınız, karakterleri de ekleyemezsiniz. .substring(), .toUpperCase() gibi işlevler, kaynak dizgisini değiştirmez: Tamamen yeni bir dize döndürürler. –

+0

Ah, tamam. Açıklama için teşekkürler. Upvoted. – Ivannnnn