Как я делаю вызываемый объект JS с произвольным прототипом? [дубликат]

Вы можете использовать булево значение, установленное вашим типом ввода, и использовать его в то время.

while ((isReadingFromFile && (reader1.reader1.readLine() != null)) ||
       crunchifyIterator.hasNext()) {

Я не уверен, что это лучший вариант, хотя, возможно, лучше переместить код в while переходит к приватному методу, если вы хотите разделить код между двумя петлями

if (...) {
    while (crunchifyIterator.hasNext()){
        handleLine(crunchifyIterator.next());
    }
} else {
    while ((line = reader1.readLine()) != null) {
       handleLine(line);
    }
}
15
задан Community 23 May 2017 в 12:34
поделиться

3 ответа

Нет ничего, чтобы мешать Вам добавить произвольные свойства к функции, например,

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 в опытную цепочку, однако существует несколько вещей отметить:

  • я не знаю, поддерживает ли IE __proto__ или даже имеет эквивалент, frome некоторые - комментарии, это смотрит только на работу в Firefox и основанных на сафари браузерах (таким образом, camino, хром, и т.д. работают также).
  • o.__proto__ = f.__proto__; только действительно необходимо для функций прототипа функции как function.toString, таким образом, Вы могли бы хотеть просто пропустить его, особенно если Вы ожидаете o иметь значимый прототип.
12
ответ дан 1 December 2019 в 04:18
поделиться

я надеюсь делать вызываемый объект JavaScript, с произвольной опытной цепочкой, но не изменяя Function.prototype.

я не думаю, что существует портативный способ сделать это:

необходимо или установить свойство [[Prototype]] функционального объекта или добавить свойство [[Call]] к регулярному объекту. Первый может быть сделан через нестандартное __proto__ свойство (см. ответ olliej ), второй невозможен насколько я знаю.

[[Прототип]] может только портативно быть установлен во время создания объекта через свойство функции конструктора prototype. К сожалению, насколько я знаю, что нет никакой реализации JavaScript, которая позволила бы временно повторно присваиваться Function.prototype.

3
ответ дан 1 December 2019 в 04:18
поделиться

Самая близкая перекрестная вещь браузера я приехал, является этим (протестированный в 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
1
ответ дан 1 December 2019 в 04:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: