我需要更多地澄清这个问题。我有一个对象,它有两个这样的函数。
<script type="text/javascript">
obj =
{
f1 : function ()
{
var k = this. f2(param1 , param2 , param3);// I don't know whether it is correct
},
f2 : function (par1 , par2 , par3)
{
return param1 + param2 + param3;
}
}
</script>
如何从f1调用函数f2?我可以在f2中声明f1吗?如果是,那怎么回事?哪种方法最好?
答案 0 :(得分:1)
不是要替换上面的答案,而是提供一个替代方案:当我编写具有方法的对象的定义时,我更喜欢使用函数构造函数,这样我就可以隐藏“私有”闭包变量并且与OOP有一些相似之处。
var myClass = function() {
/******** PRIVATE **********/
var _s = "foo"; // Private member
var _f = function() {}; // Private method
/******** PUBLIC **********/
this.s = "bar"; // Public member
this.f1 = function() { // Public method
console.log(_s + " " + this.s); // Concat private and public
}
this.f2 = function() {
this.f1();
}
}
var myObject = new myClass();
myObject.f2(); // prints "foo bar"
答案 1 :(得分:0)
要共享this
,最好将这些函数添加到obj.prototype中。
obj = {};
obj.prototype = {
f1: function(){
},
f2: function(params){
}
};
答案 2 :(得分:0)
这样的事情可能会给你一个更好的主意。我测试过它运行正常。
obj =
{
f1 : function ()
{
console.log("in F1");
obj.f2();
},
f2 : function ()
{
console.log("in F2");
}
};
console.log(obj.f1());
这是它的小提琴=&gt; http://jsfiddle.net/CJ7Uz/
答案 3 :(得分:0)
关于Barmar的建议,这是代码的样子:
<script type="text/javascript">
var obj = {
f1: function () {
var k = this.f2(param1 , param2 , param3);
},
f2: function (par1 , par2 , par3) {
return par1 + par2 + par3;
}
};
</script>
另外,在代码中this.
之后粘贴一个空格是个坏主意。 :)
答案 4 :(得分:0)
像这样调用f2:
<pre>
<script type="text/javascript">
obj =
{
f1 : function ()
{
var k = this.f2(1 , 2 , 3);// it is correct :)
alert(k);
},
f2 : function (par1 , par2 , par3)
{
return par1 + par2 + par3;
}
}
obj.f1();
</script>
</pre>
并查看下面的链接,找到第二个问题的答案
http://www.phpied.com/3-ways-to-define-a-javascript-class/
答案 5 :(得分:0)
您可以按照您提供的代码使用它,但要注意范围。 请考虑以下两部分代码的输出。
obj =
{
f1 : function () {
var k = this. f2(1 , 2 , 3);
},
f2 : function (par1 , par2 , par3){
console.log(this);
return par1 + par2 + par3;
}
}
obj.f1();
和
obj =
{
f1 : function () {
var k = this. f2(1 , 2 , 3);
},
f2 : function (par1 , par2 , par3){
console.log(this);
return par1 + par2 + par3;
}
}
function MyClass () {
return this;
}
MyClass.prototype = obj;
var tmp = new MyClass();
tmp.f1();
您也可以在f2中声明f1,但如果您想在其他地方使用f1,则必须编写f1 agian。
答案 6 :(得分:-1)
您的问题已解决:
<a href="#" onclick="obj.f1()">Click</a>
obj =
{
f1 : function ()
{
alert('f1');
var param1=param2=param3=0;
var k = this.f2(param1 , param2 , param3);
},
f2 : function (param1 , param2 , param3)
{
alert('f2')
return param1 + param2 + param3;
}
}
有关演示,请访问此链接DEMO