function ShowHome(){document.write(this.home);
}
function Furit(home,color,price){ this.home=home;
this.color=color;
this.price=price;
this.ShowHome=ShowHome;//?为什么不能写成函数的形式

}
上面的代码是用构造函数的方法创建类,我不理解的是this.ShowHome=ShowHome;为什么这么写this.ShowHome()=ShowHome();不行吗,求指教。

解决方案 »

  1.   

    this.ShowHome()=ShowHome()绝对不行。
    this.属性   属性名不可能是函数,不能添加()
      

  2.   

    有程序基础的,不管什么程序都应该会知道的
    ShowHome  函数名,是函数指针/函数对象/函数引用,代表函数本身
    ShowHome()执行函数,如果有返回值,也表示函数的返回值
    还是把基础补一补吧,多写点代码,先不要急于学习js的面向对象
      

  3.   

    ShowHome为什么不加()是因为你加了()函数就会立即执行,然而每个函数没有明确的返回值的时候返回的是undefined所以你的那个this.showHome的值就是undefined,就算你this.showHome()里面是不会执行的,而是在你this.ShowHome=ShowHome();这个的时候就已经执行了。所以 你懂吧?还不懂来站内信
    his.ShowHome()=ShowHome()你这个意思是把方法赋值给一个方法 仿佛没有任何意义。
      

  4.   

    ShowHome是函数的引用,js中函数是一种特殊的类型,所以可以这样理解ShowHome本身是一个对象,只不过是一个函数对象。
    this.ShowHome = ShowHome;这条语句表示给this注册一个属性并吧ShowHome赋值给这个属性,这样,this.ShowHome和ShowHome就指向了相同的函数。
    this.ShowHome() = ShowHome(); 
    这条语句的写法是错误。 首先,变量名加(),只有在变量指向一个函数的情况下是合法的,表示运行该指向的函数。 赋值语句期望一个合法的左值, 而函数运行得到返回值,返回值其实放在临时的空间里,函数返回值是不能作为左值的。当然,它是一个合法的右值。所以:
    this.ShowHome  = ShowHome();
    这样写是语法正确的。但是,这样写的含义就和上面完全不同了,()表示运行,那么就是给this注册ShowHome属性,并把ShowHome()的返回值赋值给该属性。
      

  5.   

    +1,那句话就是单纯的在Furit方法里主次一个属性showHome,然后把一个方法的引用赋给他,当然你也可以随便赋什么东西...JS就这点好啊...你想挂什么就挂什么....当然其实Furit你也可以看成个对象...