Для Scala> = 2.12 используйте Source.fromResource
:
scala.io.Source.fromResource("located_in_resouces.any")
На самом деле оказывается, что это возможно , хотя в нестандартный путь.
Mozilla, WebKit, Blink/V8, Носорог и ActionScript обеспечивают нестандартное __proto__
свойство, которые позволяют изменять прототип объекта после того, как это было создано. На этих платформах следующий код возможен:
function a () {
return "foo";
}
a.b = function () {
return "bar";
}
function c () {
return "hatstand";
}
c.__proto__ = a;
c(); // returns "hatstand"
c.b(); // returns "bar"; inherited from a
Это могло бы быть полезно для любого, кто не должен волноваться о межплатформенной совместимости.
Однако примечание, что только эти свойства из объекта могут быть наследованы. Например:
var d = {};
d.__proto__ = a;
d.b(); // returns "bar"
d(); // throws exception -- the fact that d is inheriting from a function
// doesn't make d itself a function.
Короткий ответ: не возможный.
Эта строка Вашего кода:
var d = new c();
автоматически предполагает, что d
объект. Если c
не конструктор встроенного объекта, например, Function
. Но если c
уже определяется языком, Вы не можете управлять его прототипом и не можете "наследовать" его от того, что Вы любите. Ну, в некоторых интерпретаторах Вы можете, но Вы не можете сделать этого безопасно через все интерпретаторы — в стандарте говорится: "Вы не смешивает со стандартными объектами, или интерпретатор ударит Вас!".
встроенные объекты "уникальны", и JavaScript не обеспечивает способы копировать их. Не возможно воссоздать Строку, Число, Функцию, и так далее не обращаясь к несовместимому обману.
Это должна на самом деле быть цепочка прототипа? Можно использовать смесительный шаблон, чтобы заставить функцию иметь все свойства вместо этого. Можно даже обернуть его в хороший "новый" синтаксис для фальсифицирования его, если Вы действительно хотите.
function a () {
return "foo";
}
a.b = function () {
return "bar";
}
function c () {
var f = function(){
return a();
};
//mixin all properties on a
for(var prop in a){
f[prop] = a[prop];
}
return f; //just returns the function instead of "this"
};
var d = new c(); //doesn't need the new keyword, but just for fun it still works
alert(d()); //show "foo"
alert(d.b()); //shows "bar"
можно добавить свойства к d, не влияя a. Единственная разница между этим и что Вы хотите, - то, что изменения в желании не влияют на существующие "экземпляры" c.
Да, это возможно, если вы используете свойство __ proto __
, упомянутое Дэниелом Кэссиди. Хитрость заключается в том, чтобы c
фактически возвращал функцию, к цепочке прототипов которой было прикреплено a
.
function a () {
return "foo";
}
a.b = function () {
return "bar";
}
function c () {
var func = function() {
return "I am a function";
};
func.__proto__ = a;
return func;
}
c.prototype = a;
var d = new c();
d.b(); // returns "bar"
d(); // returns "I am a function"
Однако вам нужно будет еще немного настроить цепочку прототипов, если вы хотите, чтобы instanceof
возвращал лучшие результаты.
d instanceof c // true
d instanceof a // false
c instanceof a // false