我想拥有的是这样的:
var fnc = new constructor(); // --> function()...
fnc(); // --> Running main function
fnc.method(); // --> Running method
这样可以创建新的fnc
实例,同时在构造函数原型中使用方法。但是,我似乎无法将构造函数的结果作为函数,因为无论return子句如何,它似乎都成为一个对象,从而导致...
Uncaught TypeError: Property 'fnc' of object [object Object] is not a function
:(
修改:添加了示例代码。所以我的想法是沿着这些方向。
var constructor = function() { return function() { console.log('Running main function.') }; };
constructor.prototype.method = function() { console.log('Running method.'); }
var fnc = new constructor();
console.log('constructor: ', constructor);
console.log('fnc: ', fnc);
console.log('fnc.method: ', typeof $.method);
console.log('');
fnc();
fnc.method();
在这种情况下,一个人得到......
Uncaught TypeError: Object function () { console.log('Running main function.') } has no method 'method'
...错误,因为构造函数提供的函数与构造函数本身不同,在构造函数本身上添加了原型链。只是似乎无法绕过这个。有一个版本的jQuery像初始化,它做了诀窍好,但我后来发现它最终通过空函数原型来完成它,这意味着每个函数都得到了方法。
答案 0 :(得分:2)
您无法从构造函数实例创建可调用对象。
你可以有一个函数返回一个可调用函数,该函数有分配给它的方法:
function foo() {
function fn() {
..do stuff..
}
fn.method = function () {
..do more stuff..
};
return fn;
}
var bar = foo();
bar(); //does stuff
bar.method(); //does more stuff
你甚至可以将函数作为构造函数调用,但它实际上与直接将函数作为函数调用相同,而不是构造类的新实例:
var baz = new foo();
baz(); //does stuff
baz.method(); //does more stuff
baz instanceof foo; //false
答案 1 :(得分:-2)
function Constructor(n,s,r) {
this.var1 = n;
this.var2 = s;
this.var3 = r;
}
var fnc = new Constructor("Hi", 3, 6);
fnc.prototype.myMethod = function() {
console.log (this.var1);
}
答案 2 :(得分:-2)
您可以专门为这样的对象创建方法
function myObject(name)
{
this.name = name;
}
myObject.prototype =
{
getName: function()
{
console.log("Name is: " + this.name);
return this.name;
}
}
var newObj = myObject("javascript");
var objname = newObj.getName();
console.log("Name is again: " + objname);