<script>
 function a()
{
    var self = this;
    var trim = function(str){
        return str.replace(/(^s*)|(s*$)/g, "")
    }
    var start = function(){
        self[trim("  xxxx  ")] = "aaaaaa";  //xxxx  和 aaaa 象征性的文本,表意
    }
    start();
}
</script>本人JS小鸟,对上面的代码块百思不得其解,希望各位帮忙详解下,正则还能勉强理解,可到了:self[trim()]这个种形式,就很郁闷了忘大家不吝赐教啊。

解决方案 »

  1.   

    关键看这个this,你看是什么调用这个方法的,是不是一个数组?
      

  2.   

    this是当前方法,至于为什么要用[]调用,关注下 
      

  3.   

    这样:var xx = new a();
    xx.trim("xxx");我不能理解的是在a里面的这一段,self[trim("  xxxx  ")] = "aaaaaa"; 
    是否this[Function] == this.Function? 那么给this[Function] = value, 是否就等同于
    this.Function(value)?
      

  4.   

    trim("  xxxx  ")="xxxx"
    self["XXXX"]="aaaaa";
    即self.xxxx = "aaaa".
    我是这么理解的.
      

  5.   

    self[trim("xxxx")] = "aaaaaa";
    self.xxxx 是从何而来啊?没有xxxx函数,也没有xxxx属性啊?代表什么?
    self[这里放个函数?]
    还是很纠结啊。
      

  6.   

    var xx = new a();
    xx.trim("xxx");
    这种用法有误,var trim = function(str),xx.trim 外部访问不到
      

  7.   

    。[]的用法:var obj = new Object();obj.name = 'test';alert(obj.name);等同于
    var obj = new Object();obj["name"] = 'test';alert(obj.name);
    因为你这里trim(" xxxx ")他是变量,用.是出不来的。所以用[],也能达到指向属性的效果下面再说self的问题。这里涉及到闭包
      

  8.   


            <script>
                function al()
                {
                    var self = this;
                    var trim = function(str){
                        alert('xxxx');
                    }
                    var start = function(){
                        self[trim("  xxxx  ")] = "aaaaaa";  //xxxx  和 aaaa 象征性的文本,表意
                    }
                    start();
                }            function say()
                {
                    var xx = new al();
                    xx.trim("xxx");
                }
            </script>
     <body onload="say()">可以啊。
      

  9.   

    trim 返回值 string,xxxx就是返回的字符串,属性可以通过  对象[属性名]  的方式添加
      

  10.   

    xx.trim is not a functionfirefox 3.6.6
      

  11.   

    function start() {
        this.name = "test";
    }这个this,指向离他最近的function本身var start = function() {
        this.name = "test";
    }这种写法和上面那种没有任何区别function Test() {    var start = function() {
            this.name = "123";
        }    start();}var test = new Test();// undefined
    alert(test.name);//undefined
    alert(test.start);以上代码证明了,写在function中的this,并没有连到Test对象中。因为start function比Test关系更近为了解决以上问题,可以在Test中,强制var targetThis = this;因为内部类可以调用外部类资源,使得这一调用成为可能function Test() { var targetThis = this;
        var start = function() {
            targetThis.name = "123";
        }    start();}var test = new Test();// 123
    alert(test.name);加上上面的回答,也可以改写成
    function Test() { var targetThis = this;
        var start = function() {
            targetThis["name"] = "123";
        }    start();}var test = new Test();// 123
    alert(test.name);
      

  12.   

    愿闻其详啊,
    另外,还有一问:self[trim("  xxxx  ")] = "aaaaaa";
    //按8L大虾的语义,这里给trim传入xxxx,?然后又给trim赋值aaaaaa?,那它该怎么处理呢?
      

  13.   

    trim("  xxxx  ")返回的肯定是字符串对挖。那么他肯定是个变量,那么你可以看成使我代码里的targetThis["name"]这块
      

  14.   

    先调用trim,返回个字符串,
    然后self[根据字符串找到属性]
    最后self[属性名]=......赋值
      

  15.   

    因为trim返回的是变量,不是常量,所以没办法obj.name,而只能obj["name"]
      

  16.   

    var x = new a("xxxxx");
    我不理解,在new a的时候给传进取的值给了谁?给了a本身?(麻烦您到帖子上回复,谢谢了)答:
    function a(test) {
        ...
    }这样的代码可以看成是a的构造函数new a("xxxxxx");
    的时候,可以看成调用了这个函数。这个时候,如果
    function a(test) {
        this.test = test;
    }
    那么指向了a对象的属性。