收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 9656|回复: 35

JavaScript对象探讨

[复制链接]
发表于 2009-11-18 19:59:34 | 显示全部楼层 |阅读模式
由于JavaScript的灵活性,可以让每个人按照自己的习惯进行编写代码.有函数式的编程方式,也有现在用的较为广泛的对象字面量.由于面向对象的出现,JavaScript刚开始的函数编程也逐渐演化为类式编程方式.现在我对几种比较熟悉的编程习惯进行简单的说明:
1.对象字面量:
  1. var person = {
  2.         name:null,
  3.         setName:function(name){
  4.                 this.name = name;
  5.                 return this.name;
  6.         },
  7.         getName:function(){
  8.                 alert(this.name);
  9.         }
  10. }
复制代码

具有JavaScript特色的一种编程方式,以类为单位含有属性name,方法setName和getName.调用方法比较简便person.setname('R'),this由此至终均指向person,person的属性与方法均不私有,可以进行调用.

2.prototype构造器调用模式
  1. var Person = function(){
  2.         this.name = null;
  3. }

  4. Person.prototype.setName = function(name){
  5.         this.name = name;
  6. }

  7. Person.prototype.getName = function(){
  8.         alert(this.name);
  9. }
复制代码

也是很常见的编程方式,创建一个Person类,然后利用prototype对类进行扩展,添加方法.与对象字面量最大区别在于,调用该类的方法时,必须先new(跟Java调用类相似).var p = new Person();p.getName();如果不用new,而直接创建,会产生错误.而且这种错误将不会报错,难以发现.错误的产生原因来自于this指向Person.prototypel,而Person并没有setName方法.

3.利用匿名函数进行函数编程
  1. (function(){
  2.         var name;
  3.                   
  4.         var setName = function(n){
  5.                  name = n;
  6.         }
  7.         window['person']['setName'] = setName;
  8.        
  9.         var getName = function(){
  10.                 alert(name);
  11.         }
  12.         window['person']['getName'] = getName;
  13. })()
复制代码

类的出现,其中一个最大的好处就是降低了全局变量的出现,但是如果你依旧习惯于函数式编程,没关系,只要创建一个匿名函数,进行闭包,就可以再里面进行函数编程,也不需要担心全局变量的出现.如上所看到的var name;在匿名函数外部是无法调用的,然后利用外部的变量来调用内部的函数,或者是变量.可以借此创建私有变量和私有方法.

4.类式编程(不知道取什么名)
  1. var person = function(){
  2.         var name = null;
  3.         return{
  4.                 setName:function(n){
  5.                         name = n;
  6.                 },
  7.                 getName:function(){
  8.                         alert(name);
  9.                 }
  10.         }
  11. }
复制代码

与对象字面量很相似,其不同之处在于抛开了this,和可以对方法与属性进行私有.调用方法与对象字面量基本一致.

5.方法链
  1. var Person = function(){
  2.         this.name = null;
  3. }

  4. Person.prototype = {
  5.         setName:function(name){
  6.                 this.name = name;
  7.                 return this;
  8.         },
  9.         getName:function(){
  10.                 alert(this.name);
  11.                 return this;
  12.         }
  13. }
复制代码

jQuery就是一个最经典的方法连库,如果还不懂方法链是什么,看看这个例子:
  1.         var p = new Person();
  2.         p.setName('Tom').getName().setName('Ray').getName();
复制代码

由于每个方法的结尾都是return this;所以产生了方法链式的类.

本人比较熟悉的就是这几种方式了,每个人都有每个人的特色,所以方式也是说不尽的.但是借此,我想探讨以下几个问题:
1.有关于this指针
在建立多种类的时候都用到this,可是this的作用究竟是什么,而其实this在重用和继承上起着很大的作用.我们先看看一个关于继承的例子:
首先建立Person类:
  1. var Person = function(){
  2.         this.name = null;
  3. }

  4. Person.prototype.setName = function(name){
  5.         this.name = name;
  6. }

  7. Person.prototype.getName = function(){
  8.         alert(this.name);
  9. }

  10. Person.prototype.getAge = function(){
  11.         var age = this.age || '';
  12.         alert(age);
  13. }
复制代码


然后在建立一个Children类,并集成Person的所有方法和属性:
  1. var Children = function(age){
  2.         this.name = null;
  3.         this.age = age;
  4. }

  5. Children.prototype = new Person();        //继承Person的属性和方法

  6. Children.prototype.ageJudge = function(){        //另外为Children添加新方法
  7.         if(this.age > 18){
  8.                 alert('成年人~');
  9.         } else {
  10.                 alert('未满18岁呢~');
  11.         }
  12. }

  13. Children.prototype.getName = function(){        //重写getName方法
  14.         var about = this.name + ' ' + this.age;
  15.         alert(about);
  16. }

  17. var tom = new Children(12);
  18. var ages = tom.getAge();        //12
  19. var judge = tom.ageJudge();        //未满18岁呢~
  20. var setN = tom.setName('Tom');
  21. var get = tom.getName();        //Tom 12
复制代码

这就是继承,然后我们看个简单的函数重用:
  1. var SetColor = function(){
  2.         this.style.backgroundColor = '#000';        //this指向window
  3. }

  4. document.body.onclick = SetColor;        //此时this指向body
  5. documnet.getElementById('color').onmouseout = SetColor;                //this指向documnet.getElementById('color')
复制代码

看了this的作用之后,想必对this有了新的认识了吧.现在就有疑问了,就是this的该用与不该用,下面在看个简单的例子:
  1. var setColor = {
  2.         init:function(obj){
  3.                 this.obj = obj;                //this指向setColor
  4.                 this.obj.onclick = this.color;
  5.         },
  6.         color:function(){
  7.                 this.style.backgroundColor = '#000';        //this指向obj
  8.         }
  9. }
复制代码

就在一个类里,this却指向2处地方,有时这样总会让人觉得困惑.刚学习的人更会被this弄的晕头转向.而稍稍改变一下写代码的方式:
  1. var setColor = {
  2.         init:function(obj){
  3.                 setColor.obj = obj;               
  4.                 setColor.obj.onclick = setColor.color;
  5.         },
  6.         color:function(){
  7.                 this.style.backgroundColor = '#000';        //this可以方便方法的重用
  8.         }
  9. }
复制代码

这样一下来,代码可以更加的清晰了.所以编写代码的时候应该考虑好究竟今后的用途,还有能否重用.如果明确了不进行继承或是重用,个人觉得应该尽可能的避免使用this,更有个比较常出现的问题.如下:
  1. var Person = function(){
  2.         this.name = null;
  3. }

  4. Person.prototype.setName = function(name){
  5.         this.name = name;
  6. }

  7. Person.setName('tom');        //错误方式此时setName方法中的this将指向Person.prototypel,Person并没有setName方法
复制代码

前面讲过,若果不写成var p = new Person();p.setName('tom');该类里的this将会直接指向Person.prototypel.这种错误在编译时,还是运行时都不会报错.有时会造成让人很头痛的问题.所以在编写代码时,我总是很慎重的选用this.

2.类的封装
在Java里,对类的方法或是属性,可以设置为私有,这样就可以避免外部的调用,而JavaScript却不存在这样的设置,看看下面的代码:
  1. var person = {
  2.         name:null,
  3.         init:function(name){
  4.                 this.setName(name);
  5.         },
  6.         setName:function(name){
  7.                 this.name = name;
  8.                 return this.name;
  9.         }
  10. }
  11. person.init('tom');        //tom
复制代码

在这个类里,一共有2个方法,分别是init和setName,而我们只希望从init中运行setName,或是以后将会为里面添加的各种方法,而不希望出现:
  1. person.setName('tom');        //tom
复制代码

直接调用setName方法,正确的说,希望setName方法私有,还有name属性私有.避免别的程序员使用你的类时,调用了不想被调用的方法.
那应该怎么对类的封装好呢?试试另一种编程方式吧,看看改版的怎么样:
  1. var person = function(){
  2.         var name = null;
  3.         var setName = function(n){
  4.                 name = n;
  5.                 return name;
  6.         }
  7.         return{
  8.                 init:function(n){
  9.                         setName(n);
  10.                 }
  11.         }
  12. }
复制代码

这样子,就可以讲原本要私有化的方法和属性私有化了,外部无法直接调用了.这也是利用了闭包而达成所需要的方式的.可是这种编程方式不易于读,尤其是新手看到这种代码会很吃力,还有在占用内存方面也要比一般的高些.
好了,暂时先介绍到这里,下次有时间在说说闭包与作用域.

[[i] 本帖最后由 JcssRay 于 2009-11-19 17:07 编辑 ]

评分

参与人数 1威望 +1 收起 理由
cloudgamer + 1 谢谢分享

查看全部评分

 楼主| 发表于 2009-11-18 20:29:36 | 显示全部楼层
PS.本人只是一名大学准毕业生,如有哪里说的不对,很希望各位提出。
让我改正下想法,和多些进步~谢谢呢~
回复 支持 反对

使用道具 举报

发表于 2009-11-18 20:34:33 | 显示全部楼层
总结的很好,JS的面向对象确实很不好理解!
回复 支持 反对

使用道具 举报

发表于 2009-11-18 20:40:02 | 显示全部楼层
像一些框架里 经常还要用上apply()方法,就更不好理解了。
回复 支持 反对

使用道具 举报

发表于 2009-11-18 23:04:06 | 显示全部楼层
对楼主这种认真总结,无私分享的精神表示欣赏,在此我斗胆提一点自己的一些看法:

第一点:

我觉得第一种所谓的“对象字面量”的叫法是不妥当的。
首先什么是字面量?
下面是我的理解,如果有错误或者闹了笑话大家批评就行,我不怕脸红。
我认为字面量是语言中用来表示数据的有形的可视化载体。
比如在JS中字符串字面量是:引号与其中间的非同级引号的字符
例子:
//红色部分为我们定义的一段字符串类型的数据的字面量,而实际数据体以二进制储存在内存中。
var a = "我是字符串_abc_123";


好,说到javascript的对象的字面量,那就是在我们定义一个对象的时候用来表示对象的那些有形字符的组合。
//红色部分为我们定义的一个对象类型的数据的字面量。
//我们需要注意的是person并不是对象的字面量,它是一个变量名。
//这个变量指向了我们使用字面量定义的那个对象在内存中的引用。

var person = {
    name:null,
    setName:function(name){
        this.name = name;
        return this.name;
    },
    getName:function(){
        alert(this.name);
    }
}

将用键值对定义JS对象的方法叫做对象字面量,我总感觉不是很舒服。

第二点:

楼主在第一段说
具有JavaScript特色的一种编程方式,以类为单位含有属性name,方法setName和getName.调用方法比较简便person.setname('R'),this由此至终均指向person,person的属性与方法均不私有,可以进行调用.

不知道是如何得到的结论。
给楼主举个例子:
var person = {
    name:null,
    setName:function(name){
        this.name = name;
        return this.name;
    },
    getName:function(){
        alert(this.name);
    },
        test:function(){
                return function(){
                        alert(this===window);
                }
        }
}
person.test()();

 提示:您可以先修改部分代码再运行


this指向谁关键是它处在作用域链中的什么位置。

[[i] 本帖最后由 zehee 于 2009-11-19 09:49 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-11-18 23:35:47 | 显示全部楼层
在楼主讲述的第二种“prototype构造器调用模式”中。

让我比较困惑的是“prototype构造器”这种叫法。

prototype是JS中对象的一个属性,这个属性指向这个对象的构造函数对象(或instanceof对象)的原型。这个原型也是一个对象,它本身也存在父原型([prototype chian]原型链)一直到顶层的Object.prototype。

刚才讲的是向上追溯,而我们实现向下继承传递的时候,会把父类的实例添加到子类的构造函数的原型中,然后通过new操作符生产新的实例。这个实例会先查找本身的方法属性(它构造函数中定义的方法和属性)然后会到prototype指向的那个原型对象(就是他的构造函数的原型)中查找方法和属性,这样就实现了继承和重载。

但是需要提出的是prototype不是构造器,它是一个指向原型对象的属性。我们通常会写一个function来作为构造函数生产对象。

“prototype构造器”的叫法似乎不妥。

然后楼主说:
如果不用new,而直接创建,会产生错误.而且这种错误将不会报错,难以发现.错误的产生原因来自于this指向window,而不是指向类本身.

这种说法令人费解。1、怎样不用new操作符直接创建?2、this指向window?
这个地方希望楼主能够举例说明,否则让人一头雾水。

[[i] 本帖最后由 zehee 于 2009-11-19 09:59 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-11-19 00:27:16 | 显示全部楼层
下面讲到Children 继承Person 类的时候,我们写Children 的构造函数的时候为了能够保持访问父类的构造函数,并让他们具有自然的继承性,通常可以这样写:
var Children = function(age){
    //这里直接访问父类的构造函数,否则Person类的构造函数中定义的属性比较多的情况下,在Children类中在此人为的重复去抄写Person类的这些属性是不优雅而且不合理的事情。
    Person.call(this,null);
    this.age = age;
}


还有一点下面讲到this的时候
var setColor = {
    init:function(obj){
        this.obj = obj;        //this指向setColor
        obj.onclick = this.color;
    },
    color:function(){
        this.style.backgroundColor = '#000';    //this指向obj
    }
}
就在一个类里,this却指向2处地方,有时这样总会让人觉得困惑.刚学习的人更会被this弄的晕头转向.


这里楼主没有解释清楚为什么“this却指向2处地方”,这里就涉及到JS双链中的另一条链:作用域链。
当在init方法中写下这句:
obj.onclick = this.color;

的时候,实际上是将this.color指向的方法函数置于obj对象的作用域之下,而JS中的this指向的是在作用域链中向上离自己最近的那个对象。
回复 支持 反对

使用道具 举报

发表于 2009-11-19 00:30:10 | 显示全部楼层
学习面向对象的Javascript的第一步就是要搞清楚两个东西:原型链和作用域链
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 10:27:16 | 显示全部楼层

 提示:您可以先修改部分代码再运行


这种问题确实没有碰见过,看来对作用域链的理解不是很透彻.可是我还是不太明白究竟为什么这个时候this就指向window里了.很诡异呢~
还有在有些地方没有说清楚原因是因为觉得有些地方很多书籍都有说明了,说以就不太想在从别的书搬进来而已~` 偷下懒而~`
而很多地方的命名确实不对,但是我都不知道安啥名好,英语4级都不过,英语不行啊.~
很感谢zehee的回复,受益匪浅啊,~`等我看看哪里还需要改进的地方,很怕误人子弟呀.~`欢迎大家参加讨论.看看我哪里还有错的.~`^^
回复 支持 反对

使用道具 举报

发表于 2009-11-19 11:15:57 | 显示全部楼层
坐个板凳认真看
回复 支持 反对

使用道具 举报

发表于 2009-11-19 11:18:20 | 显示全部楼层
楼主后面的错误就比较离谱了:

var Person = function(){
    this.name = null;
}
Person.prototype.setName = function(name){
    this.name = name;
}
Person.setName('tom');    //错误方式此时setName方法中的this将指向window

前面讲过,若果不写成var p = new Person();p.setName('tom');该类里的this将会直接指向window.这种错误在编译时,还是运行时都不会报错.有时会造成让人很头痛的问题.所以在编写代码时,我总是很慎重的选用this.


这个地方体现了你对prototype的不理解。
你的例子的这个地方Person对象和Person.prototype是两个对象,后面你
...
Person.setName('tom');    //错误方式此时setName方法中的this将指向window
...


这就有点无厘头了,Person根本没有setName方法……
而且setName方法中的this也绝不是指向window的,指向Person.prototype指向的原型对象。
测试:

 提示:您可以先修改部分代码再运行



还有你对new操作符的不理解。建议仔细研究一下。

[[i] 本帖最后由 zehee 于 2009-11-19 11:22 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-11-19 13:16:19 | 显示全部楼层
后面:

2.类的封装
在Java里,对类的方法或是属性,可以设置为私有,这样就可以避免外部的调用,而JavaScript却不存在这样的设置,看看下面的代码:

  1. var person = {
  2.     name:null,
  3.     init:function(name){
  4.         this.setName(name);
  5.     },
  6.     setName:function(name){
  7.         this.name = name;
  8.         return this.name;
  9.     }
  10. }
  11. person.init('tom');    //tom
复制代码

在这个类里,一共有2个方法,分别是init和setName,而我们只希望从init中运行setName,或是以后将会为里面添加的各种方法,而不希望出现:

  1. person.setName('tom');    //tom
复制代码

直接调用setName方法,正确的说,希望setName方法私有,还有name属性私有.避免别的程序员使用你的类时,调用了不想被调用的方法.
那应该怎么对类的封装好呢?


你在此处称person是一个类,并且以类的概念去套用是错误的。
我们来看在oop中的类的概念是对于一类对象的描述。
类能够通过new操作符执行构造函数实例化。
这里person只是一个javascript对象,并不能通过new操作符生产实例。

在javascript中非要和传统的oop相比较的话,
一个function加上它的原型对象才相当于传统oop语言中的一个类(比如你提到的java)
例子:
//这个Function相当于传统类的构造函数
var Person = function(){
...
}
//构造函数的原型相当于传统类的定义部分
Person.protorype = {
...
}

//通过new操作符的修饰来生产实例
var Tom = new Person();
var Jim = new Person();


new操作符做了哪些事情呢?它生产了一个空对象,并把构造函数及其原型对象中的方法和属性赋予这个空对象,同时它把这个空对象的constructor属性指向该构造函数。

这里另一个值得注意的话题是当我们用原型实现继承的时候,通过继承的类生产的实例的constructor属性并不是指向直接生产它的构造函数,而是指向超类的构造函数,这里需要我们将它改回来。
回复 支持 反对

使用道具 举报

发表于 2009-11-19 13:41:09 | 显示全部楼层
沙发!有没有相关比较好的教程,或者书籍什么的。
回复 支持 反对

使用道具 举报

发表于 2009-11-19 13:44:30 | 显示全部楼层
原帖由 [i]gevilhost 于 2009-11-19 13:41 发表
沙发!有没有相关比较好的教程,或者书籍什么的。


您老穿越了……还沙发!~~睁大眼睛。
这里有一个基础教程:
http://www.javaeye.com/wiki/Obje ... cript?category_id=0
回复 支持 反对

使用道具 举报

发表于 2009-11-19 13:51:11 | 显示全部楼层
<script type="text/javascript">
  var setColor={
    <script type="text/javascript">
  var setColor={
     init:function(obj){
           obj.onclick=this.colors;
         },
         colors:function(){
           this.style.color='#ff6600';
         }
  }
  var o=document.getElementById('object');
  
  setColor.init(o);
</script>怎么我这样写也可以呀!obj.onclick=this.colors;中的this不是指向obj对象
         colors:function(){
           this.style.color='#ff6600';
         }
  }
  var o=document.getElementById('object');
  
  setColor.init(o);
</script>
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 14:33:57 | 显示全部楼层

回复 12# zehee 的帖子

我发现我对new和protorype存在一个错误的认识了~`
真感谢提醒了我,然后自己试着用了一下,发现存在比较大的错误.~现在有点混乱.~等我看看,然后在总结下.~
15楼的,遇到什么问题了`?
回复 支持 反对

使用道具 举报

发表于 2009-11-19 15:12:00 | 显示全部楼层
Zehee 大哥,太佩服你了,讲的如此的专业,透彻,以后还要向你请教啊
   讲解的非常精彩,真是 掷地有声啊
可以称,js专家了

楼主辛苦了,感谢分享

[[i] 本帖最后由 bluesky001 于 2009-11-19 15:17 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2009-11-19 16:47:22 | 显示全部楼层
<script type="text/javascript">
  var setColor={
    <script type="text/javascript">
  var setColor={
     init:function(obj){
          obj.onclick=this.colors;
        },
        colors:function(){
          this.style.color='#ff6600';
        }
  }
  var o=document.getElementById('object');
  
  setColor.init(o);
</script>怎么我这样写也可以呀!obj.onclick=this.colors;中的this不是指向obj对象,楼主的这句代码有什么用呀!this.obj=obj
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-19 17:17:10 | 显示全部楼层
不好意思哦.把你搞糊涂了.我改了下代码.~

  1. var setColor = {
  2.     init:function(obj){
  3.         this.obj = obj;        //this指向setColor
  4.         this.obj.onclick = this.color;
  5.     },
  6.     color:function(){
  7.         this.style.backgroundColor = '#000';    //this指向obj
  8.     }
  9. }
复制代码

只是用来说明this在不同场合里,会指向不同的地方.因为this指向的是在作用域链中向上离自己最近的那个对象.
而this.obj=obj;就是让obj的作用域大些.
而向你那样写确实是可以的.但如果我添加一个方法:

  1. <script type="text/javascript">
  2.   var setColor={
  3.      init:function(obj){
  4.           this.obj = obj;
  5.           obj.onclick=this.colors;
  6.         },
  7.         colors:function(){
  8.           this.style.color='#ff6600';
  9.         },
  10.         alertObj:function(){
  11.           alert(this.obj);    //这样就可以返回obj,用setColor的obj属性,把原本的obj值调用出来
  12.         }
  13.   }
  14.   var o=document.getElementById('object');
  15.   
  16.   setColor.init(o);
  17. </script>
复制代码

所以我写那句的作用是出自于习惯而已~`还有解释this的问题.不知道表达的清晰不清晰呢.~`
回复 支持 反对

使用道具 举报

发表于 2009-11-20 09:06:10 | 显示全部楼层
看了楼主和大家的讨论,我发现自己对JS认识太肤浅了,js也是一门编程语言啊。
回复 支持 反对

使用道具 举报

发表于 2009-11-23 10:04:21 | 显示全部楼层
很好,希望像这样的贴子多多易善,有讨论,才有进步
回复 支持 反对

使用道具 举报

发表于 2009-12-3 10:20:48 | 显示全部楼层
楼主总结的不错…………
回复 支持 反对

使用道具 举报

发表于 2009-12-10 09:28:58 | 显示全部楼层
很好的帖子,怎么就每人顶
支持JcssRay和zehee,学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2009-12-11 15:59:03 | 显示全部楼层
有讨论就有进步,请继续讨论,让我们继续学习
回复 支持 反对

使用道具 举报

发表于 2009-12-22 17:21:30 | 显示全部楼层
  1. var setColor = {
  2.     $:function(id){
  3.        return document.getElementById(id);
  4.    },

  5.     c:'#f00',

  6.     init:function(obj,c){
  7.         this.c = c;
  8.         setColor.obj = obj;
  9.         setColor.obj.onclick = setColor.color;
  10.     },

  11.     color:function(){
  12.         this.style.background = setColor.c;
  13.     }
  14. }

  15. setColor.init( setColor.$('test1'), '#ccc' );
  16. setColor.init( setColor.$('test2'), '#ff0' )
复制代码


我想每次点击不同的div有同的颜色,怎么写一下。现在每次都是只认最后一次设置的颜色了。谢谢~~
回复 支持 反对

使用道具 举报

发表于 2010-1-7 13:59:24 | 显示全部楼层
十分赞zehee的解答。
“this”关键字的指向,总能引起大家的争论。
其实没那么复杂,只需记住函数调用的方式即可准确得知this的引用。
个人认为this和js双链并无关联,函数里的“this”关键字有且仅有如下四种引用
1、当该函数作为函数调用时,this指向全局对象(window);
2、当该函数作为对象的方法调用时,this指向该对象;
3、当该函数作为构造函数调用时(与“new”操作符连用),this指向新建的空对象;
4、当该函数使用apply,call调用时,this指向指定的参数。

遵循以上四点,就能合理的解释js中所有的this引用问题,大家感兴趣不妨对照一试。

如果错误还请大家指教:)
回复 支持 反对

使用道具 举报

发表于 2010-1-7 16:11:35 | 显示全部楼层
厉害,现在的同学太牛了
回复 支持 反对

使用道具 举报

发表于 2010-1-7 17:14:25 | 显示全部楼层

回复 25# spidermanlhg 的帖子

同一个对象,后面定义的方法覆盖了前面定义的
回复 支持 反对

使用道具 举报

发表于 2010-1-7 19:55:05 | 显示全部楼层
this,当不知道指向哪的时候,就指全局
回复 支持 反对

使用道具 举报

发表于 2010-1-7 21:36:20 | 显示全部楼层
围观了,学习了,仰视了…
话说哪里可以学到这些啊?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( 湘ICP备12001430号 )  

GMT+8, 2020-11-1 00:34 , Processed in 0.124684 second(s), 10 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表