【问题标题】:When are objects/instances created in JavaScript?什么时候在 JavaScript 中创建对象/实例?
【发布时间】:2010-11-08 06:00:00
【问题描述】:

我有一个 JS 脚本,在这个 JS 脚本中我有 1 个创建对象或实例的函数。

对象/实例是在页面加载时创建的,还是在我调用函数时创建的?

如果是后者,我怎样才能让它在我想要的时候创建实例?

为一个无聊的问题道歉。

谢谢大家

更新

<input type='button' name='submit' onclick='videoUpload();' value='Upload' />

函数如下:

function videoUpload(){
    $.get("getUploader.php", function(data){
    var viduploader = new AjaxUpload('#vidup', {
          action: data,
          name: 'userfile',
          responseType: 'xml',
          onSubmit: function() {
            // allow only 1 upload
            alert('onSubmit' + data);
            this.disable();
          },
          onComplete: function(file, response){
              alert('Response' + response);
          }
        });
    });
}

【问题讨论】:

    标签: javascript object


    【解决方案1】:

    这取决于你如何调用函数以及是否有 var。

    从这两个网页中阅读将教会您大部分需要了解的有关 javascript 的知识。
    https://developer.mozilla.org/en/a_re-introduction_to_javascript
    http://www.hunlock.com/blogs/Mastering_Javascript_Arrays

    【讨论】:

    • 您的 videoUpload 函数变量是在调用时创建的。
    • 那么 AjaxUpload 实例也是在页面加载时创建的吗?
    • 发出警报(“已创建”);在“var viduploader”语句之前,帮助您理清思路。 AjaxUpload 已经定义。但是在您调用“new AjaxUpload”的那一刻,它的一个实例被创建了。因此,当调用 videoUpLoad() 时,就会创建 viduploader。
    【解决方案2】:

    取决于您在哪里执行此操作。基本上它在您调用函数时创建。但是,如果您将此调用设为全局,它将在页面加载后创建。如果您想在装箱时检查它,只需检查:

    if ( typeof( obj) === 'undefined')
    {
       // wasn't created or even declared
    }
    
    if ( obj === null)
    {
      // was declared, but not created
    }
    

    PS。我认为您需要稍微说明一下您的问题。

    更新后:

    实际上在这种情况下没有创建对象,每次用户点击按钮都会导致函数调用。

    【讨论】:

    • 我使用 onclick 事件进行此调用。我已经更新了问题。
    【解决方案3】:

    对象和实例实际上是两个不同的东西。

    实例是对象的活生生的、会呼吸的、“在外面做”的版本。

    您创建了一个对象,但要使用它,您必须创建该对象的一个​​实例。例如,数组是一个对象,使用这样的数组...

    var myArray = new Array();
    

    创建该对象的“实例”。

    当谈到 OOP 时,我觉得 Javascript 看起来和感觉有点奇怪,但如果你创建了一个对象,它会是这样的

    function MyObject(){
        // your objects code goes in here
    }
    

    每当你写这样的东西时,你都会创建该对象的一个​​实例

    var myInstance = new MyObject();
    

    Here's a great primer on OOP in javascript。我强烈推荐它。

    【讨论】:

    • 感谢您的参考资料:但是您认为在这种情况下,AjaxUpload 实例也是在页面加载时创建的吗?我已经更新了问题。
    • 当页面加载并且浏览器已经解释了 Javascript 文件时,将创建 OBJECT。但它只会在被调用时使用。因此,在您的示例中,每次单击按钮并调用 VideoUpload 函数时都会创建一个 AjaxUpload 的实例。在调用 VideoUpload 之前,javascript 只知道存在 AjaxUpload 对象,并等待被告知创建它的实例。
    【解决方案4】:

    有几种方法可以做到这一点,我无法告诉您其中一种是否比另一种特别好,但这里有几种方法。

    //create a function
    function SomeObject() {
        var self = this;
    }
    
    //and create it using 'new'
    var a = new SomeObject();
    
    
    //create an object of a function
    var SomeOtherObject = function() {
        var self = this;
    };
    
    //and in similar fashion
    var b = new SomeOtherObject();
    
    //or just create a function that creates new object
    var YetAnother = function() {
        var gen = {};
        return gen;
    };
    
    //and create by calling the function
    var c = YetAnother();
    

    【讨论】:

      猜你喜欢
      • 2019-06-13
      • 2017-05-06
      • 1970-01-01
      • 2018-03-02
      • 2017-09-23
      • 1970-01-01
      • 2014-09-14
      • 2019-10-17
      • 2017-11-15
      相关资源
      最近更新 更多