比如有对象var obj = {
companyname:function(option){
var format = validateRules.isCompanyname(option.value);
var length = validateRules.betweenLength(option.value,1,50);
var opt = option;
if(!format || !length){
if(!format) opt.errInfo = option.prompts.error.badFormat;
if(!length) opt.errInfo = option.prompts.error.badLength;
validateFunction.errorfunc(opt);
}else{
validateFunction.succefunc(option);
}
}//companyname end
,companyaddr:function(option){
var format = validateRules.isCompanyname(option.value);
var length = validateRules.betweenLength(option.value,1,50);
var opt = option;
if(!format || !length){
if(!format) opt.errInfo = option.prompts.error.badFormat;
if(!length) opt.errInfo = option.prompts.error.badLength;
validateFunction.errorfunc(opt);
}else{
validateFunction.succefunc(option);
}
}
}
因为companyname和companyaddr属性是一样的函数,我想简写为var obj = {
companyname:function(option){
var format = validateRules.isCompanyname(option.value);
var length = validateRules.betweenLength(option.value,1,50);
var opt = option;
if(!format || !length){
if(!format) opt.errInfo = option.prompts.error.badFormat;
if(!length) opt.errInfo = option.prompts.error.badLength;
validateFunction.errorfunc(opt);
}else{
validateFunction.succefunc(option);
}
}//companyname end
,companyaddr:this.companyname
}
改了后提示object is not a function,不能正确引用函数js对象内怎么复制属性?
在线等

解决方案 »

  1.   


    var tmp=function(option){
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        };
    obj={companyname:tmp,companyaddr:tmp};
    tmp=null;
      

  2.   

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
     <head>
      <title> New Document </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <script>
      var tmp=function(option){
    alert(option);
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        };
    obj={companyname:tmp,companyaddr:tmp};
    tmp=null;
      </script>
     </head> <body>
      <input type="button" id="btnTest" onclick="obj.companyname('companyname')" value="测试1"><br/>
      <input type="button" id="btnTest" onclick="obj.companyaddr('companyaddr')" value="测试2">
     </body>
    </html>
      

  3.   

    在里面貌似是无法做到。var obj = {
        companyname:function(option){
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        }//companyname end
        ,companyaddr:this.companyname//这里的this指向的是window对象
    }注意最后一排的注释
      

  4.   

    在内部写是不行的,因为obj是一个数组对象,这样写是可以的:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
     <head>
      <title> New Document </title>
      <meta name="Generator" content="EditPlus">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <script>
     var obj = {
        companyname:function(option){
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        }//companyname end
        ,companyaddr:function(option){}
    }
    obj.companyaddr = obj.companyname;
      </script>
     </head> <body>
      <input type="button" id="btnTest" onclick="obj.companyname('companyname')" value="测试1"><br/>
      <input type="button" id="btnTest" onclick="obj.companyaddr('companyaddr')" value="测试2">
     </body>
    </html>
      

  5.   


    var obj = {
        companyname:function(option){
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        }//companyname end
        ,companyaddr:obj.companyname
    }
      

  6.   

    不行啊,Cannot read property 'companyname' of undefined
      

  7.   

    关于js对象中this的引用解释起来有些麻烦,有很多中情况。类似你的这个例子,建议你构建个类,在类中this引用指向类构造的对象,而直接定义一个对象时,可以这么理解,在定义对象时,该对象还未完全建立,所以里面非函数中的this指向的时当前执行时有效的作用域。用代码解释吧:window.test='a';
    var obj={
        test:'test',
        a:this.test,//这里的this指向window对象,可以理解为在定义obj时obj未完全建立,this指向当前执行时网上搜索的第一个有效作用域,为当前window对象。
        fun:function(){//这里的this指向的是obj,可以理解为在调用obj.fun时obj已经建立完成,执行fun函数时this网上搜索的第一个有效作用域为obj。
            alert(this.test);
            alert(this.a);
        }
    };
    obj.fun();
    var clazz=function(tmp){//构造函数,这个就不解释了,跟上面的又不太一样(实际上这里我解释不来……只知道构造函数建立实例对象时,函数体内的this指向建立的实例对象)
        this.companyname=tmp;
        this.companyaddr=tmp;
    };
    obj=new clazz(function(option){
            var format    = validateRules.isCompanyname(option.value);
            var length    = validateRules.betweenLength(option.value,1,50);
            var opt        = option;
            if(!format || !length){
                if(!format) opt.errInfo = option.prompts.error.badFormat;
                if(!length) opt.errInfo = option.prompts.error.badLength;
                validateFunction.errorfunc(opt);
            }else{
                validateFunction.succefunc(option);
            }        
        }
    );