JavaScript var返回“未定义”

时间:2019-04-02 01:03:46

标签: javascript html html5

我在函数内部有一个变量:

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!

2 个答案:

答案 0 :(得分:0)

startApp函数将分配给构造函数startApp函数)-它是类的属性,而不是实例的属性。如果要检查PACKAGEPATH,请检查构造函数的属性(a.constructorSystem.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)

问题与对象绑定有关。您正在将变量设置为对象本身的属性,而不是对象的实例。