“哦,不,”我听到你呻吟道,“不再是这个问题”,但忍耐一分钟。Javascript原型 - 在这种情况下有什么优势?
我正试图抓住原型,并且我理解跨对象实例共享通用功能的好处。但是,在下面的情况下,我通过使用原型而不是仅仅是一个独立的函数获得了什么?
我想冒了一句和随机化每个字的位置,这样我可以做到以下几点:
Array.prototype.shuffle = function() {
var i = this.length;
if (i == 0) return this;
while (--i) {
var j = Math.floor(Math.random() * (i + 1));
var a = this[i];
var b = this[j];
this[i] = b;
this[j] = a;
}
return this;
};
function randomiser(){
var s = "My name is Bob";
var shuffledSentence = s.split(' ').shuffle().join(' ');
console.log(shuffledSentence); // "Bob My name is"
}
或者,我可以用一个简单的函数调用而不是随机化我的字符串:
function randomise(arrayToRandomise){
var i = arrayToRandomise.length;
if (i == 0) return arrayToRandomise;
while (--i) {
var j = Math.floor(Math.random() * (i + 1));
var a = arrayToRandomise[i];
var b = arrayToRandomise[j];
arrayToRandomise[i] = b;
arrayToRandomise[j] = a;
}
return arrayToRandomise;
}
function randomiser(){
var s = "My name is Bob";
var shuffledSentence = s.split(' ');//.shuffle().join(' ');
var myShuffledString = this.randomise(shuffledSentence).join(' ');
console.log(myShuffledString); // "Bob My name is"
}
我在这里通过使用原型获得了什么(除了更优雅的代码!)?
就我个人而言,我远离改变本地对象的原型,因为它可以打破'for .. in',显然它打破封装:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/ Inheritance_and_the_prototype_chain#Bad_practice.3A_Extension_of_native_prototypes在您自己定义的对象中使用原型可以使用已知模式进行继承,代码重用等(OOP标准模式):http://stackoverflow.com/a/16063711/1641941 – HMR