<script language="jscript">
function myclass() {
var name="myname";
this.showName=showName;
function showName() {
alert(getName());
};
this.setName=function () {
setName();
}; function getName() {
return name;
}
function setName() {
name = Math.random();
}
}var obj=new myclass;
obj.showName();
obj.setName();
obj.showName();
</script>
function myclass() {
var name="myname";
this.showName=showName;
function showName() {
alert(getName());
};
this.setName=function () {
setName();
}; function getName() {
return name;
}
function setName() {
name = Math.random();
}
}var obj=new myclass;
obj.showName();
obj.setName();
obj.showName();
</script>
解决方案 »
- 跪求一个ajax tabs!!!!!!!
- JQ或者JQ 获取服务器控件checkboxlist的text??????
- 求教各位高手JS如何连接数据库
- 怎么判断表单里面输入文字时的事件(不是获取焦点喔)
- setTimeout导致页面重复提交
- 如果字符串是一个匿名函数,可以让它运行吗?
- javascript中能用doevents()函数吗?
- 有没有第三方调试VBScript的软件?
- 一个头疼的问题.关于菜单和object的显示问题.谢谢大家
- (急,急,急,急!)关于selection 的问题,欢迎各位指教!!!(100分)
- 我能否用js 获取调用此js的页面的meta内容
- 100分求 button的一个特效(改错)
function getName() {
return this.name;
}
里面不能调用外层函数的私有属性,所以在fason(咖啡人生) 的例子里把name定义为公共变量就OK了
function myclass() {
this.name="myname";
this.showName=function()
{
showName(obj=this);
}
function showName() {
alert(getName(arguments[0]));
} function getName() {
return arguments[0].name;
}
}
var obj=new myclass;
obj.showName();
</script>
<script language="jscript">
function myclass() {
this.name="myname";
this.showName=showName;
function showName() {
alert(this.getName());
}
this.getName=function()
{
return this.name;
}
}
var obj=new myclass;
obj.showName();
</script>
function myclass() {
this.name="myname1";
this.showName=function()
{
alert(this.getName());
}
this.getName=function()
{
return this.name;
}
}
var obj=new myclass;
obj.showName();
</script>
function getName() {
return this.name;
}
大家都应该知道每个JS函数其实就是一个对象,当你返回this.name其实是返回getName这个对象的属性,而这个属性你又没有给赋值那当然没有了。
function myclass() {
this.name="myname";
this.showName=showName;
function showName() {
alert(getName.call(this));
}function getName() {
return this.name;
}
}var obj=new myclass;
obj.showName();
</script>
alert(getName());
==> 只改动这一行代码即可
alert(getName.call(this));
return this.name;
}
}
这里指向的是getName.name
<script language="jscript">
function myclass() {
this.name="myname";
this.showName=showName;
function showName() {
alert(this.getName());
}this.getName=function() {
return this.name;
}
}var obj=new myclass;
obj.showName();
</script>
function myclass() {
var a=this;
this.name="myname";
this.showName=showName;
function showName() {
alert(getName());
}function getName() {
return a.name;
}
}var obj=new myclass;
obj.showName();
</script>
<!--
function x(n)
{
function y()
{
function inner1()
{
alert(n);
}
function inner2()
{
n = n + 1;
} return [inner1, inner2];
}
return y;
}a = x(3);
farray = a();
f1 = farray[0];
f2 = farray[1];f1();
f2();
f1();farray2 = a();
g1 = farray2[0];
g2 = farray2[1];g1();
g2();
f1();
//-->
</SCRIPT>http://rchen.cnblogs.com/archive/2006/05/19/404598.html
....
this.getName=function() {
return this.name;} //指向的是 myclass.namefunction getName()
{
return this.name; //指向的是getname.name
}
}
根据Microsoft(R) JScript(R) HELP中,有这么一段:
对于 JScript 的客户版本,如果在其他所有对象的上下文之外使用 this,则它指的是 window 对象。同时也已经进行了验证,确实是如此。几位朋友说的函数中this指的是函数本身的,其实不是,而是window。欢迎大家继续讨论,月底结帖。
根据Microsoft(R) JScript(R) HELP中,有这么一段:
对于 JScript 的客户版本,如果在其他所有对象的上下文之外使用 this,则它指的是 window 对象。同时也已经进行了验证,确实是如此。几位朋友说的函数中this指的是函数本身的,其实不是,而是window。欢迎大家继续讨论,月底结帖。
----------------------------------并非如此,this是指向本身的指针,但是我们可以这么用<SCRIPT LANGUAGE="JavaScript">
<!--
var a = "BlueDestiny";
alert(window.a);
alert(this.a);function f() {
alert("never-online");
}
function c(x) {
this.a = function(){alert("memeber")};
this[x]();
this['a']();
}
c("f");
//-->
</SCRIPT>
即,this这个关键字就是指向Context对象。
你的代码更证明了HELP说的那段。
因为function c(x),在不是构造函数的情况下,并不会生成新对象,所以this指向的就是window。如果你怀疑的话,可以在普通函数(非构造函数)里加入这句试试:if(window===this) alert("yes")。其实,我真正困惑的是,为什么JS会把对象的内部内的this当成对象之外。换句话说,为什么把内部函数当成上下文之外。比如下面这样:
function c(x) {
function f1() {
if(window===this) alert("why?");
}
this.f2=function() {
if(window===this)
alert("why?");
else
alert("no!");
}
f1()
this.f2();
}
obj=new c();
=============================================
to Amwpfiqvy(侠客行):
你的解释和我上面写的例子更矛盾了。
>>>>>>普通函数运行时,其Context对象要么是调用该方法的实例对象,要么就是Gloable(即window了)如果按照你的说法,那么例子中的f1就成了Gloable,同时也成了window.f1()。那么根据你的结论,你可以试着运行下面代码:
<SCRIPT LANGUAGE="JavaScript">
function c(x) {
function f1() {
if(window===this) alert("why?");
}
this.f2=function() {
if(window===this)
alert("why?");
else
alert("no!");
}
window.f1()
this.f2();
}
obj=new c();
window.f1();//或者直接f1();
</SCRIPT>
=================说说我的结论,其实我一直认为对象的内部函数应该是private的,虽然JS并没有这个关键字。但是JS居然把private函数的作用域又划到了对象外去。说起来这也许是JS的BUG,也是缺陷。所以至今都没有private诞生,大概也是这个原因。所以至今它不具备完整的面向对象特征。不然作为一个private的函数居然不能访问public的函数和属性,岂不笑掉大牙。