Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的类存在问题_Javascript_Class - Fatal编程技术网

javascript中的类存在问题

javascript中的类存在问题,javascript,class,Javascript,Class,我用javascript编写了以下类 function main() { this.area ; this.$= function(target) { if(target == undefined) { this.area = document; } else { this.area = document.getElementById(target); if( this.area == null )

我用javascript编写了以下类

function main() 
{
  this.area ;
  this.$= function(target)
  {
    if(target == undefined)
    {
      this.area = document;
    }
    else
    {  
      this.area = document.getElementById(target);
      if( this.area == null )
      {
        this.area = document.getElementsByTagName(target);
        if( this.area[0] == null )
        alert("Error value "+target+" passed to $() is no an id or name");//code to create variable
      }
    }
  }
  this.display = function(value)
    {
      if(this.area == undefined)
      alert("Error in display() method...target not selectedddd");
      else area.innerHTML = value;
    }
}
    and i always get the error message I given as alert. Why area is always null? 
如果我没有使用
这个
关键字来引用区域,它就会工作。有没有办法像javascript那样嵌套类

function()
{
  this.a;
  function()
  {
  }
}

它不起作用的原因是,
指的是内部函数范围,而不是您称之为“类”的外部函数范围

请尝试以下方法:

function MyClass() {
    // This is the constructor.
}

MyClass.prototype = {
    method: function() {
    },

    foo: function() {
    }
};

var instance = new MyClasss();
instance.method();

我尝试了这个类,但没有收到错误消息

用法:

var m = new main();
m.$('x');
m.display('Replaced');
演示:

但是,
显示
方法中有一个错误。您使用的是
area
而不是
this.area
,但这不会导致显示错误消息,它只是阻止方法设置元素的内容

编辑: 关于你对问题的评论;
$
方法不返回对象,因此不能像
var m=new main().$('x')那样在构造函数之后链接它
,创建对象后必须调用
$
方法


您必须添加一个
返回该值
$
方法中的最后一个,以便以这种方式链接调用。

您试图实现什么?a=new main()$('divId')/*将选择id/name=divId*/a的元素。display('Hello world')将在该元素中写入Hello world…..这就是我需要实现的目标。为什么要调用自己的函数
$
?人们通常希望它能用于jQuery、Prototype等框架,以及
this.a
此区域没有意义。你的意思是定义类变量不需要这个关键字吗?不,这不正确。当你调用一个方法时,
这个
指的是对象,而不是函数范围。有必要先创建构造函数吗?…这里的prototype有什么用?。我按照你的建议修改了我的代码…但问题仍然存在remains@Guffa:那取决于电话<代码>此
可以更改,并且可以“直接”调用方法(例如method()),这会导致将
作为
窗口
未定义
(如在ES Strict中)。我不确定OP的代码到底是什么情况,因为我不明白他到底想实现什么,但从他的话来看,“如果我引用区域而不使用this关键字,它会起作用。”这听起来像是一个范围问题,但是我可能错了。@user822982是的,您需要一个构造函数来实例化任何东西。如果使用不同的上下文调用该方法,那么您建议的代码也不会工作。此外,原始代码中的作用域没有问题。它在那里工作..但当我在第页上运行它时,它不工作,并且A显示该区域为空…为什么会发生这种情况?@user822982:我看到的一种可能性是您意外地重新定义了
未定义的
。因为它不是一个常量,所以实际上可以像任何其他变量一样更改它,例如:
undefined=document。您应该检查变量的类型,而不是在代码中使用
undefined
变量:
if(typeof target==“undefined”)