提问人:forX 提问时间:5/26/2017 更新时间:5/26/2017 访问量:577
JavaScript 命名空间调用其他函数方法
javascript namespace call other function methods
问:
我尝试更改一些将方法调用到命名空间的方法。
- 调用父方法(我认为这是不可能的)
- 创建和调用继承函数
- 在另一个方法(主要是 jquery onReady 事件函数)内部调用(this.MyFunction() 不工作)
我将每个命名空间拆分到文件中(希望保持这种方式)
我尝试如何从同一命名空间中的函数 B 调用函数 A? 但我没有成功拆分命名空间。
我的小提琴示例只有 1 个子命名空间,但可以更多。
https://jsfiddle.net/forX/kv1w2rvc/
/**************************************************************************
// FILE Master.js
***************************************************************************/
if (!Master) var Master = {};
Master.Print= function(text){
console.log("master.Print :" + text);
$("body").append("<div>master.Print : " + text + "</div>");
}
/**************************************************************************
// FILE Master.Test1.js
***************************************************************************/
if (!Master) var Master = {};
if (!Master.Test1) Master.Test1 = {};
/**************************************************************************
* Descrition :
* Function for managing event load/documentReady
**************************************************************************/
Master.Test1.onReady = function () {
$(function () {
Master.Test1.Function1(); //try to replace because need all namespace.
try {
this.Function2(); //not working
}
catch(err) {
console.log("this.Function2 not working");
$("body").append("<div>this.Function2 not working</div>");
}
try {
this.Print("onReady"); //not working
}
catch(err) {
console.log("this.Print not working");
$("body").append("<div>this.Print not working</div>");
}
try {
Print("onReady"); //not working
}
catch(err) {
console.log("Print not working");
$("body").append("<div>Print not working</div>");
}
});
}
Master.Test1.Function1 = function () {
console.log("Function1");
$("body").append("<div>Function1</div>");
this.Function3(); //working because not inside another function
}
Master.Test1.Function2 = function () {
$("body").append("<div>Function2</div>");
console.log("Function2");
}
Master.Test1.Function3 = function () {
$("body").append("<div>Function3</div>");
console.log("Function3");
Master.Print("Function3"); //try to replace because need all namespace.
}
Master.Test1.onReady();
我使用Master.Test1.Function1();我想改变它,因为 Function1 位于同一命名空间内。
我使用Master.Print(“Function3”);我不认为我能改变这一点。我尝试使用它的方式,它更像是一个继承函数。但我不知道有没有办法做到这一点?
也许我应该更改我的命名空间方法?也许原型会做我想做的事?
答:
this
在 或 别名中 其中 是参数 。 随意引用。document
.ready()
jQuery()
.ready()
function(){}
$(function() {})
this
this.Function2()
document
您可以捕获 in 变量,因为 inside 将指向对象。如果您从不更改 -- 的调用上下文,则以下操作将起作用,即它始终在对象上调用,而不是在其他上下文中调用:this
this
$(function() {})
document
onReady
Test1
Master.Test1.onReady = function () {
var self = this;
$(function () {
self.Function1();
// ..
});
}
要访问,您必须使用对象进行引用,例如:,因为它在对象中不可用Print
Master
Master.Print()
Test1
javascript 中的“对象”的构建方式与大多数面向对象语言中的构建方式不同。从本质上讲,您正在构建的是静态方法的层次结构,这些方法本身没有真正的内部状态。因此,当调用其中一个定义的方法时,该方法的上下文(或状态)取决于调用该方法的对象。
如果你想有任何内部上下文,你需要创建一个“对象原型”的“实例”。此时,您可以在其他函数中使用“this.otherFunction”。下面是一个小例子:
var MyObject = function() {};
MyObject.functionOne = function() {
console.log("Function 1");
this.functionTwo();
};
MyObject.functionTwo = function() {
console.log("Function 2");
};
var instanceOne = new MyObject();
instanceOne.functionOne();
您可能会在此处获得有关对象定义的更多信息
评论