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();