来自超类的Javascript方法

时间:2011-10-31 00:09:35

标签: javascript

我是javascript的新手,因此StackOverflow上的一些现有答案让我很困惑。

如果我在动态类中有静态类(如下所示)。如何访问动态类中的变量?

function ListItem() = {
  var myItem = function() { return "something" };

  ...
  ItemDropdown = function(){
     show : function (){
       //Want to access the ListItem's myItem here
       alert(super.myItem() + "dropdown menu");
     }
  }
}


var foo = new ListItem();
foo.ItemDropdown.show();

3 个答案:

答案 0 :(得分:2)

如果您希望ItemDropdown成为ListItem的方法,则需要使用this进行声明。

this.ItemDropdown = {

通过定义myItem的方式,您可以单独调用它。

alert(myItem() + "dropdown menu");

您还有一些语法错误:

function ListItem() = {
// Should be
function ListItem() {

ItemDropdown = function(){
// Should be
this.ItemDropdown = {

所以,你最终得到了这个:

function ListItem() {
  var myItem = function() { return "something" };

  this.ItemDropdown = {
     show : function (){
       alert(myItem() + "dropdown menu");
     }
  }
}

答案 1 :(得分:1)

首先,Javascript不是基于类的继承,它是基于原型的继承。您需要使用诸如“函数构造函数”之类的术语。如果您来自基于“传统”类的继承语言,请检查this

这就是说,如果你想让它起作用:

var foo = new ListItem();
foo.ItemDropdown.show();

然后ItemDropdown必须是ListItem定义的属性(例如:函数构造函数) - 这意味着您需要使用this

答案 2 :(得分:0)

使用this

function ListItem()  {
  var myItem = function() { return "something" };

  ...
  this.ItemDropdown = {
     show : function (){
       //Want to access the ListItem's myItem here
       alert(myItem() + "dropdown menu"); // no super in javascript
     }
  }
}

我已修复错误:

  1. )ListItem()= {
  2. )this.ItemDropdown = function(){// then object literal mark up