Вы можете использовать булево значение, установленное вашим типом ввода, и использовать его в то время.
while ((isReadingFromFile && (reader1.reader1.readLine() != null)) ||
crunchifyIterator.hasNext()) {
Я не уверен, что это лучший вариант, хотя, возможно, лучше переместить код в while
переходит к приватному методу, если вы хотите разделить код между двумя петлями
if (...) {
while (crunchifyIterator.hasNext()){
handleLine(crunchifyIterator.next());
}
} else {
while ((line = reader1.readLine()) != null) {
handleLine(line);
}
}
Нет ничего, чтобы мешать Вам добавить произвольные свойства к функции, например,
function bar(o) {
var f = function() { return "Hello World!"; }
o.__proto__ = f.__proto__;
f.__proto__ = o;
return f;
}
var o = { x: 5 };
var foo = bar(o);
assert(foo() === "Hello World!");
delete foo.x;
assert(foo.x === 5);
я полагаю, что это должно сделать то, что Вы хотите.
Это работает путем введения объекта o
в опытную цепочку, однако существует несколько вещей отметить:
__proto__
или даже имеет эквивалент, frome некоторые - комментарии, это смотрит только на работу в Firefox и основанных на сафари браузерах (таким образом, camino, хром, и т.д. работают также). o.__proto__ = f.__proto__;
только действительно необходимо для функций прототипа функции как function.toString, таким образом, Вы могли бы хотеть просто пропустить его, особенно если Вы ожидаете o
иметь значимый прототип. я надеюсь делать вызываемый объект JavaScript, с произвольной опытной цепочкой, но не изменяя Function.prototype.
я не думаю, что существует портативный способ сделать это:
необходимо или установить свойство [[Prototype]] функционального объекта или добавить свойство [[Call]] к регулярному объекту. Первый может быть сделан через нестандартное __proto__
свойство (см. ответ olliej ), второй невозможен насколько я знаю.
[[Прототип]] может только портативно быть установлен во время создания объекта через свойство функции конструктора prototype
. К сожалению, насколько я знаю, что нет никакой реализации JavaScript, которая позволила бы временно повторно присваиваться Function.prototype
.
Самая близкая перекрестная вещь браузера я приехал, является этим (протестированный в FF, IE, Crome и Opera):
function create(fun,proto){
var f=function(){};
//Copy the object since it is going to be changed.
for (var x in proto)
f.prototype[x] = proto[x];
f.prototype.toString = fun;
return new f;
}
var fun=function(){return "Hello world";}
var obj={x:5}
var foo=create(fun,obj);
foo.x=8;
alert(foo); //Hello world
alert(foo.x); // 8
delete foo.x;
alert(foo.x); // 5