这个javascript是什么意思

时间:2011-01-05 16:32:41

标签: javascript

我有一个类似下面的脚本

       qq.UploadHandlerForm = function(o){
        this._options = {
            action: '/upload',
            onComplete: function(id, fileName, response){}
        };
        qq.extend(this._options, o);

        this._inputs = {};
    };

qq.UploadHandlerForm.prototype = {
    add: function(fileInput){
        fileInput.setAttribute('name', 'qqfile');
        var id = 'qq-upload-handler-iframe' + qq.getUniqueId();       

        this._inputs[id] = fileInput;

        // remove file input from DOM
        if (fileInput.parentNode){
            qq.remove(fileInput);
        }

        return id;
    },
    upload: function(id, params){                        
        var input = this._inputs[id];

        if (!input){
            throw new Error('file with passed id was not added, or already uploaded or cancelled');
        }                

        var fileName = this.getName(id);

        var iframe = this._createIframe(id);
        var form = this._createForm(iframe, params);
        form.appendChild(input);

        var self = this;
        this._attachLoadEvent(iframe, function(){            
            self._options.onComplete(id, fileName, self._getIframeContentJSON(iframe));

            delete self._inputs[id];
            setTimeout(function(){
                qq.remove(iframe);
            }, 1);
        });

        form.submit();        
        qq.remove(form);        

        return id;
    },
    cancel: function(id){        
        if (id in this._inputs){
            delete this._inputs[id];
        }        

        var iframe = document.getElementById(id);
        if (iframe){
            iframe.setAttribute('src', 'javascript:false;');

            qq.remove(iframe);
        }
    },
    getName: function(id){
        // get input value and remove path to normalize
        return this._inputs[id].value.replace(/.*(\/|\\)/, "");
    },  
    _attachLoadEvent: function(iframe, callback){
        qq.attach(iframe, 'load', function(){
            if (!iframe.parentNode){
                return;
            }
            if (iframe.contentDocument &&
                iframe.contentDocument.body &&
                iframe.contentDocument.body.innerHTML == "false"){
                return;
            }

            callback();
        });
    },
    _createIframe: function(id){
        var iframe = qq.toElement('<iframe src="javascript:false;" name="' + id + '" />');
        iframe.setAttribute('id', id);

        iframe.style.display = 'none';
        document.body.appendChild(iframe);

        return iframe;
    },
    _createForm: function(iframe, params){
        var form = qq.toElement('<form method="post" enctype="multipart/form-data"></form>');
        var queryString = '';
        for (var key in params){
            queryString += "/"+ encodeURIComponent(params[key]);
        }

        form.setAttribute('action', this._options.action + queryString);
        form.setAttribute('target', iframe.name);
        form.style.display = 'none';
        document.body.appendChild(form);

        return form;
    }
};

我想知道“_”用于什么,以及什么是“_createIframe:function(id){}”?什么是“getName:function(id)”调用?

其次,我想在“_createForm:function(iframe,params){}”中使用getName。我该怎么做?我试过像

这样的东西
 _createForm: function(id,iframe, params){var fn= this.getName(id)} 

但收到错误


编辑:添加作为答案发布的信息。

当我这样做时

_createForm: function(iframe, params){
  var fname = this.getName(id);
    }

我收到错误“id is undefined”。然后我试试

 _createForm: function(id, iframe, params){
  var fname = this.getName(id);
    }

我收到错误“this._input [...]。value is null或者不是对象”

5 个答案:

答案 0 :(得分:3)

  

我想知道“_”用于什么,

_只是名称中的第一个字符。

  

...什么是“_createIframe:function(id){}”?什么是“getName:function(id)”调用?

它们是已分配给UploadHandlerForm类的原型对象的函数。它们将可供该类的所有实例访问。

  

其次,我想在“_createForm:function(iframe,params){}”中使用getName。我该怎么办?

_createForm内部,您可以将其称为:

this.getName('some id');

如果您收到错误,则需要告诉我们错误是什么。

答案 1 :(得分:0)

_只是变量标识符的一部分,它在技术上并不代表JS中的任何内容,但它可能对开发人员有特殊意义(例如,所有带_的变量都可以做某些特定的事情)

_createIframe:function(id){}是对象的一部分(一次性对象像这样创建{}或从JS Object类扩展)。他们使用prototype属性将一个对象扩展为另一个对象。

尝试qq.UploadHandlerForm.getName(...)

答案 2 :(得分:0)

_只是名称的一部分,但在名称的开头有一个常见的约定“这个东西是私有的;你可能不应该乱用它”。在Javascript中,内容是隐式公开的;你实际上必须跳过一些箍(浪费一些记忆)来获得真正的私有变量。有些人不会这样做,而是给私人的东西一个特殊的名字,并相信其他人不会用它来捣乱。 (无论如何,私有变量本身只是一种惯例,在大多数语言中;任何真正想要看到它们的人都可以.JJ使得它变得更加困难,但是坦率地说这很糟糕。)

答案 3 :(得分:0)

下划线字符只是标识符的一部分。在这种情况下可能用于表示成员变量/例程。

_createForm: function(iframe, params){}

..是一个名称 - 值对。 _createForm是名称,函数定义是值。因此该函数称为_createForm

我建议在javascript上观看Doug Crockford的系列节目。

The Javascript programming language

Advanced Javascript

答案 4 :(得分:-1)

你在这里采取了错误的做法。

如果您是JavaScript的新手,您应该首先尝试阅读一些教程,而不是仅仅考虑您看到的第一部分复杂代码并尝试解决它。您需要首先了解基础知识以及它们如何组合在一起。

从这里开始:

http://www.w3schools.com/js/default.asp