Это технически возможно, но вы можете решить вашу проблему более элегантно (объяснение следует ниже):
function mything() {
var a, b, c;
function PrivateConstructor() {
this.publicFunc = function() {}
}
// this is the magic that makes it happen:
PrivateConstructor.prototype = mything.prototype;
return new PrivateConstructor();
}
mything1 = mything();
assert(mything1 instanceof mything); // passes
Или, с ECMAScript 5 особенности:
function mything() {
var a, b, c;
var object = Object.create(mything.prototype);
object.publicFunc = function() {}
return object;
}
mything1 = mything();
assert(mything1 instanceof mything); // passes
Объяснение
Оператор instanceof
даст истину, если правый операнд является функцией, а объект сохраняется в свойстве prototype
этой функции содержится в цепи прототипов с левой стороны операнда.
Первый пример повторяет mything.prototype
как свойство «prototype» для другой временной функции, которая используется только для создания одного объекта (с mything.prototype
в цепочке прототипов). Второй пример создает такой объект, наследуя от mything.prototype
непосредственно с Object.create()
.
Оба объекта наследуются от mything.prototype
и поэтому проходят тест object instanceof mything
.
Это, как говорится, шаблон, предложенный jfriend00, имеет меньше накладных расходов и его легче читать, предоставляя функциональность, которую вы хотели иметь.
Для того чтобы 'instanceof' возвращал true, конструктор' prototype' должен находиться в цепочке прототипов экземпляра. –