Chinaunix

标题: 菜鸟求助JS问题! [打印本页]

作者: stormgenius    时间: 2007-09-07 15:51
标题: 菜鸟求助JS问题!
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 编辑 ]
作者: dz902    时间: 2007-09-07 23:50
应该用 class 来定义和存取属性,而不是 function。
作者: dz902    时间: 2007-09-07 23:51
我的意思是:属性是属于 class 的而不是 function。
作者: we_2002    时间: 2007-09-10 22:03
var ins = new i(1,2)
alert(ins.p1)
作者: dz902    时间: 2007-09-11 16:05
原来还能这样玩,厉害
作者: a_coder    时间: 2007-09-17 12:38
function i(){
this.p1 = '1';
}

i.prototype = {

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

}
作者: achun.shx    时间: 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. }
复制代码

作者: a_coder    时间: 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 编辑 ]




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2