免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3058 | 回复: 7
打印 上一主题 下一主题

菜鸟求助JS问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-07 15:51 |只看该作者 |倒序浏览
function i(a,b) {
        this.p1="kkkkkkk";
        return a+b;
}
alert(i(1,2));  // 显示为3
alert(i.p1);   // 显示为 undefined


p1被定义成一个属性,但i.p1取不到值!如何正确得到i.p1的值???

[ 本帖最后由 stormgenius 于 2007-9-7 15:53 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-07 23:50 |只看该作者
应该用 class 来定义和存取属性,而不是 function。

论坛徽章:
0
3 [报告]
发表于 2007-09-07 23:51 |只看该作者
我的意思是:属性是属于 class 的而不是 function。

论坛徽章:
0
4 [报告]
发表于 2007-09-10 22:03 |只看该作者
var ins = new i(1,2)
alert(ins.p1)

论坛徽章:
0
5 [报告]
发表于 2007-09-11 16:05 |只看该作者
原来还能这样玩,厉害

论坛徽章:
0
6 [报告]
发表于 2007-09-17 12:38 |只看该作者
function i(){
this.p1 = '1';
}

i.prototype = {

init : function(a,b){...};

}

论坛徽章:
0
7 [报告]
发表于 2007-09-17 15:40 |只看该作者
alert(i.p1);   // 显示为 undefined

当然了.
因为this.p1="kkkkkkk";里的this指的是最顶层域对象window.
你仔细想想.js里没有独立的class概念,都是object,
只有在class中的this指的是class的实例.
object里只有通过prototype 来实现 class 的 this 特性.

  1. function i(){
  2. this.p1 = 'this is window';
  3. }

  4. i.prototype = {

  5.   init : function(a,b){
  6.     this.p1='this is me';
  7.   }
  8. }
复制代码

论坛徽章:
0
8 [报告]
发表于 2007-09-19 09:41 |只看该作者
js中对于function的理解是保存一段代码的变量。因此,就有了var a = function(){}的写法。而{...}这种可以理解为数组的某种写法。既然如此,{ init : function(){} }就不难理解了。将数组中某个键的值存储为一段代码,即为函数。

js中是没有 class 的概念的。

不妨这么试验一下:

function a() { var a = '1'; }
alert(a);

注意上面是a,而不是a()。

[ 本帖最后由 a_coder 于 2007-9-19 09:42 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP