【发布时间】:2014-03-17 18:39:43
【问题描述】:
“哦,不”,我听到你呻吟,“不要再问这个问题了”,但请耐心等待一分钟。
我正在努力掌握原型设计,并且我了解跨对象实例共享通用功能的好处。但是,在以下情况下,使用原型而不是单独的函数可以获得什么?
我想取一个句子并将每个单词的位置随机化,所以我可以执行以下操作:
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,而且显然它会破坏封装:developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/… 在您自己定义的对象中使用原型可以使用已知模式进行继承,代码复用等(OOP标准模式):stackoverflow.com/a/16063711/1641941
标签: javascript prototype