| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1687 人关注过本帖
标题:请大家帮忙看看:如何在事件处理函数中重定向"this"?
只看楼主 加入收藏
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
回复 18楼 hugeannex
投了你一票。不过似乎没什么用,这次选举貌似是无效的  可能是票数太少吧。
2010-12-15 09:48
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
hugeannex,劳驾你顺便也给我讲解一下上面一仁兄的一段话:

版主所说的“访问不到”,其实不是访问不到,而是没有清楚地告诉javascript解释器要访问哪个对象里的成员——所以,概念还是应该树立清楚。


俺好长长学识。
对于这样一段代码
程序代码:
var Fun = function(){
    var name = "test";
}
Fun.prototype = {
    //定义方法
}

我怎么着才能清楚地告诉javascript解释器我想要从外部访问Fun里的私有成员了

这都可以的话,我是不是可以理解为其他语言的private其实也是没清楚的告诉编译器怎么去访问

别告诉我在构造函数中写特权方法,这不能用来解释“清楚地告诉javascript解释器要访问哪个对象里的成员”


[ 本帖最后由 foktime 于 2010-12-15 10:33 编辑 ]
2010-12-15 10:00
sclorg
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:152
注 册:2010-4-16
收藏
得分:0 
感觉var that = this;就是承上启下作用的一段代码
2010-12-15 16:52
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
以下是引用sclorg在2010-12-15 16:52:24的发言:

感觉var that = this;就是承上启下作用的一段代码
错,这句的意思是记住当前位置this的指向,因为这句后面的代码this的指向就是另一个东西了

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-12-15 20:27
冰镇柠檬汁儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:北京
等 级:版主
威 望:120
帖 子:8078
专家分:6657
注 册:2005-11-7
收藏
得分:0 
回复 22楼 foktime
私有成员就是在类的内部实现中可以共享的成员。但是并不对外公开,JavaScript中并没有特殊的机制来定义私有成员,但是可以用一些技巧来实现这个功能。主要是通过变量的作用域性质来实现的,在一个函数内部定义的变量称为局部变量,该变量不能被函数外的程序所访问,可以被函数内部定义的嵌套函数所访问。
在类的构造函数中可以为类添加成员,通过这种方式定义的成员,实际上共享了在构造函数内部定义的局部变量,这些变量就可以看作是类的私有成员。如:
实现私有成员
<script>
function class1(){
var pp="this is a private property";//私有属性成员pp
function pm(){//私有方法成员pm,显示pp的值
      alert(pp);
}
this.method1=function(){//在公有成员中改变私有属性的值
      pp="pp has been changed";
}
this.method2=function(){
    //在公有成员中调用私有方法
    pm();
}
}
var obj1 = new class1();
obj1.method1();
obj1.method2();
</script>
注意:
局部变量(私有成员)被所有在构造函数中定义的公有方法所共享,而且仅被在构造函数中定义的公有方法所共享,这意味着,在prototype中定义的类成员不能访问在构造器中定义的局部变量。
实现静态成员:
和私有成员勉强相比,静态成员就要正统的多了,静态成语就是属于一个类的成员,如:
function class1(){

}
class1.staticProperty="sample";
class1.staticMethod=function(){
    alert(class1.staticProerty);
}
class1.staticMethod();
如果要给每个函数对象都添加通用的静态方法,还可以函数对象所对应的类Function来实现:
Function.prototype.showArgsCount=function(){
    alert(this.length);
}
function class1(a){
}
class1.showArgsCount();
由此可见,通过Function的prototype原型对象,可以给任何函数都加上通用的静态成员。

本来无一物,何处惹尘埃
It is empty at all here, Why pm 2.5 is so TMD high!
2010-12-15 20:33
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
回复 25楼 冰镇柠檬汁儿
你复制了一大通基础知识,但非我想要看到的。

严格来说,js不存在类的概念,我们只能说是在写模拟类

我只是针对上面提到的那句话,希望有人能给出个支持那话的论据,怎么着能清楚地告诉javascript解释器要访问哪个对象里的私有属性或方法,概念怎么树立才叫清楚


[ 本帖最后由 foktime 于 2010-12-16 09:00 编辑 ]
2010-12-16 08:54
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
特想见识一下,外部访问对象私有属性、方法的高超手段
2010-12-16 08:56
foktime
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:奥斯维辛
等 级:贵宾
威 望:35
帖 子:795
专家分:2742
注 册:2009-9-4
收藏
得分:0 
以下是引用sclorg在2010-12-15 16:52:24的发言:

感觉var that = this;就是承上启下作用的一段代码
建议你仔细看下我前面出的小题,看明白了这地方你自然就懂了
2010-12-16 09:05
sclorg
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:152
注 册:2010-4-16
收藏
得分:0 
不用咬文嚼字,我并非不理解,我只是通俗的记忆,对于初学者,不用讲一大堆道理,时间长了反而记不住,只要记住这儿缺少一段起什么作用的代码,究其原理任何一个会google的人都会明白
2010-12-16 09:22
快速回复:请大家帮忙看看:如何在事件处理函数中重定向"this"?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032144 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved