我在函数内部有一个变量:
var System = {
startApp:function(package) {
System.startApp.PACKAGE = package;
System.startApp.PATH = "@APP:/" + package;
},
};
但是当我调用函数时:
var a = new System.startApp("Mr. T.");
alert(a.PACKAGE + ", " + a.PATH);
它返回带有字符串undrfined, undefined
的警报。
问题不在于我使用mkdir
shell命令创建的文件夹。
这不是应用程序,而是网页。
问题:
我需要在code above (2)
中以相同的方式调用该函数,但是该函数需要工作。但是如何?
PS:没有API!
答案 0 :(得分:0)
startApp
函数将分配给构造函数(startApp
函数)-它是类的属性,而不是实例的属性。如果要检查PACKAGE
和PATH
,请检查构造函数的属性(a.constructor
或System.startApp
):
var System = {
startApp:function(package) {
System.startApp.PACKAGE = package;
System.startApp.PATH = "@APP:/" + package;
},
};
var a = new System.startApp("Mr. T.");
console.log(a.constructor.PACKAGE + ", " + a.constructor.PATH);
请注意,var a
仅在System.startApp
上有原型函数的情况下才会与任何有用的东西绑定在一起,例如:
var System = {
startApp:function(package) {
System.startApp.PACKAGE = package;
System.startApp.PATH = "@APP:/" + package;
},
};
System.startApp.prototype.doSomething = () => {
console.log('doing something');
};
var a = new System.startApp("Mr. T.");
console.log(a.constructor.PACKAGE + ", " + a.constructor.PATH);
a.doSomething();
如果没有,startApp
被称为构造函数是没有意义的,将属性分配给函数也没有多大意义。
如果希望每个实例都具有单独的属性,则将其分配给this
的属性:
var System = {
startApp:function(package) {
this.PACKAGE = package;
this.PATH = "@APP:/" + package;
},
};
var a = new System.startApp("Mr. T.");
console.log(a.PACKAGE + ", " + a.PATH);
答案 1 :(得分:0)
问题与对象绑定有关。您正在将变量设置为对象本身的属性,而不是对象的实例。