首页 > JS访问变量问题

JS访问变量问题

function formAttributeFactory() {
    //var fieldTypes;
    var service = {
        setFieldTypes: setFieldTypes,
        outSide1: outSide1,
        outSide2: outSide2,
        fieldTypes:"1"
    };
    return service;

    function setFieldTypes(fieldTypes) {
        this.fieldTypes = fieldTypes;
    }

    function _add(){
        console.log(this.fieldTypes);
        var fieldTypes = this.fieldTypes;
        return fieldTypes[0];
    }

    function outSide1() {
        console.log(this.fieldTypes);
    }

    function outSide2() {
        var a = _add();
        console.log(this.fieldTypes);
    }
}


var obj = new formAttributeFactory();
obj.setFieldTypes([1,2,3]);
obj.outSide1();
console.log("-----");
obj.outSide2();


代码中执行outSide1()能输出内容,执行outSide2()会有错误。我想正常的输出fieldTypes内容,请问改如何改进。


function formAttributeFactory() {  
                
                this.fieldTypes = '',
                
                this.setFieldTypes = function(fieldTypes) {
                    this.fieldTypes = fieldTypes;
                },
            
                this. _add = function(){
                    console.log(this.fieldTypes);
                    var fieldTypes = this.fieldTypes;
                    return fieldTypes[0];
                },
            
                this.outSide1 = function () {
                    console.log(this.fieldTypes);
                },
            
                this.outSide2 = function () {
                    var a = this._add();
                    console.log(this.fieldTypes);
                }
            }
            
            
                var obj = new formAttributeFactory();
            obj.setFieldTypes([1,2,3]);
            obj.outSide1();
            console.log("-----");
            obj.outSide2();

var a = _add.apply(this);

var a = _add();

修改成

var a = this._add();

要不然_add()方法内的this指向会出现错误。


_add在调用时里面的this指向不对,所以console.log(this.fieldTypes);是undefined

function formAttributeFactory() {
    //var fieldTypes;
    var service = {
        setFieldTypes: setFieldTypes,
        outSide1: outSide1,
        outSide2: outSide2,
        _add: _add,            // new line
        fieldTypes:"1"
    };
    return service;

    function setFieldTypes(fieldTypes) {
        this.fieldTypes = fieldTypes;
    }

    function _add(){
        console.log(this.fieldTypes);
        var fieldTypes = this.fieldTypes;
        return fieldTypes[0];
    }

    function outSide1() {
        console.log(this.fieldTypes);
    }

    function outSide2() {
        var a = this._add(); // _add() => this._add();
        console.log(this.fieldTypes);
    }
}


var obj = new formAttributeFactory();
obj.setFieldTypes([1,2,3]);
obj.outSide1();
console.log("-----");
obj.outSide2();

你的代码问题是:

 你初始化对象的返回信息里面并不包含_add方法,因此你在outSide2里面调用_add方法已经无效,因为并不存在这样的方法在obj里面,这一点你可以console下这个obj;
  你在outSide2()方法里面调用_add的时候,并没有标明作用域,也就是this,导致报错,现在修改如下:
function formAttributeFactory() {
            //var fieldTypes;
            var service = {
                setFieldTypes: setFieldTypes,
                outSide1: outSide1,
                outSide2: outSide2,
                _add : _add,
                fieldTypes:"1"
            };
            return service;

            function setFieldTypes(fieldTypes) {
                this.fieldTypes = fieldTypes;
            }

            function _add(){
                console.log(this.fieldTypes);
                var fieldTypes = this.fieldTypes;
                return fieldTypes[0];
            }

            function outSide1() {
                console.log(this.fieldTypes);
            }

            function outSide2() {
                var a = this._add();
                console.log(this.fieldTypes);
            }
        }


        var obj = new formAttributeFactory();
        console.log(obj);
        obj.setFieldTypes([1,2,3]);
        obj.outSide1();
        console.log("-----");
        obj.outSide2();
【热门文章】
【热门文章】