所以我有一个对象 Obj 和一些方法。如果在没有任何方法的情况下调用该对象,我想运行一个特定的方法。那可能吗?如果是这样的话?
e.g。
function obj(variable){
this.method = function(){};
this.noMethod = function(){};
}
var test = new obj(variable);
调用console.log(test)
现在应该在测试时调用noMethod。
我希望你明白我的意思。
如果调用方法,对象有一个nodelist,它会运行该方法。 如果您只是调用该对象,它应该返回节点列表并可能更改它,具体取决于参数。
是否有办法检查是否使用方法调用了对象?这样,如果没有调用其他方法,我可以使用if语句来检查并运行我的方法。
答案 0 :(得分:1)
你看过javascript的arguments.length
function obj(variable, bool){
if(bool)
this.method = function(){};
else
this.noMethod = function(){};
}
var test = new obj(something, false);
调用console.log(test)
会导致this.noMethod
答案 1 :(得分:1)
请注意,您想要的确切行为是不可能的(afaik),因为
test.noMethod
转换为字符串的情况下调用test
,也不要将其作为调用它的函数。这意味着你需要一个吸气剂。test
,那么test.otherMethod
也会调用test.noMethod
!一些替代方案:
使用.toString()
方法:
function Obj(variable){
this.method = function(){};
this.noMethod = function(){ alert('foo'); };
this.toString = function(){ return this.noMethod(); }
}
var test = new Obj();
test+''; // Calls test.noMethod, and returns test.noMethod()
使用getters(1):
function Obj(variable){
this.method = function(){};
this.noMethod = function(){ alert('foo'); };
}
var obj = {test: new Obj()}, tmp = obj.test;
Object.defineProperty(obj, 'test', {
get: function(){ return tmp.noMethod() }
});
obj.test; // Calls tmp.noMethod, and returns test.noMethod()
obj.test.noMethod(); // Calls test.noMethod once and throws an error!
使用getters(2):
function Obj(variable){
this.method = function(){};
this.noMethod = function(){ alert('foo'); };
}
var obj = {test: new Obj()}, tmp = obj.test;
Object.defineProperty(obj, 'test', {
get: function(){ tmp.noMethod(); return tmp }
});
obj.test; // Calls tmp.noMethod, and returns tmp
obj.test.noMethod(); // Calls test.noMethod twice!
使用功能:
function Obj(variable){
var f = function(){ return f.noMethod(); };
f.method = function(){};
f.noMethod = function(){ alert('foo'); };
return f;
}
var test = new Obj();
test(); // Calls test.noMethod, and returns test.noMethod()
test instanceof Obj // false!
答案 2 :(得分:0)
这应该在使用时调用no方法,并且在调用时调用方法,如果没有,那么我不确定你是否可以在没有函数的情况下完成此操作。
function Obj() {
this.method = function(){};
this.noMethod = function(){};
return this.noMethod();
}
我原来说使用参数var但仍然不适合你的请求。
答案 3 :(得分:0)
您正在寻找此
function obj(){
this.method = function(){};
this.noMethod = function(){};
this.toString = function() {return 'x'}
}
var test = new obj();
alert(test)
或者这个:
function obj(){
this.method = function(){};
this.noMethod = function(){};
}
obj.prototype.toString = function() {return 'x'}
var test = new obj();
alert(test)
在此处查看更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
答案 4 :(得分:0)
根据您对问题的评论,这并不能解决您的问题,我不确定这是否真的可行,因为我认为您试图在不调用的情况下执行某项功能一个函数 - 这可能与构造函数的想法有关 - 但在此之后我再也不认为你了。
但是这种结构可能会给你一些替代方案的想法(尽管不可否认它并不是你所追求的)。
var test = function() {
alert('hello');
return {
moo : function() {
alert('moo');
}
}
};
var obj = test(); //hello
obj.moo(); //moo
编辑:
也许它确实有帮助,快乐的日子: - )