javascript中的类存在问题
我用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 )
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”)
。