js问题求解 var obj1=new Object(); obj1.p=1; obj1.getP=function(){ alert(this.p); }();为什么这样就是undefined;一定要obj1.getP(); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 oje1是你new 出来的一个对象,对象调用方法好像不是调用属性的吧 比价下面两个你就知道了:var obj1=new Object(); obj1.p=1; obj1.getP=function(){ alert(this.p); };function a(){ this.p = 5; alert(this.p)}obj1.getP = a();//这明显是函数的返回值,而在a里面定义的属性p却成了function的属性仔细想想吧。不一样的。 this 是指向你函数本身,也就相当于你在调用obj1.getP(),而不是指向你这个对象obj! lz这样写的话就可以取到obj1的p了var obj1 = { p: 1, getP: function(){ alert(this.p); }}obj1.getP(); 没有得到我想要的答案我的意思其实很简单obj1.getP=function(){}() 与obj1.getP()在结构上面好像没有区别啊。为什么后者的this是obj1而前者我感觉貌似this是obj1.getp 没有什么原因 这种给对象定义方法是错误的obj1.getP=function(){ alert(this.p); }();上面那行代码 肯定是先执行后面的函数而此时this关键字就指的是function本身 他没有P属性 肯定弹出undefined函数执行完毕后 才将返回值传递给obj1.getP 且此时的getP已经不是obj1的方法了 只是obj1的一个属性罢了看看下面的例子你就明白了<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>example</title></head><body><script>var obj1=new Object(); obj1.p=1; obj1.getP=function(){ alert(this.p); return "aaa"}();document.write(obj1.getP)</script></body></html> 虽然obj1.getP=function(){ alert(this.p); }();这种调用法。肯定是错的。因为function(){}(),肯定先执行后面的function,然后再绑定到getP句柄,所以肯定不对但是,这种方法也不对,那就不可思议了。<html><head><script type="text/javascript"> var obj1 = new Object(); obj1.p = 1; (obj1.getP = function(){ alert(this.p); })();</script></head></html>如果说,第一段代码调用失败。是因为getP绑定了function地返回值,那么我们看看这段<html><head><script type="text/javascript"> var obj1 = new Object(); obj1.p = 1; alert(obj1.getP = function(){ alert(this.p); });</script></head></html>加上括号以后,这绝对是函数句柄阿。但是第2端调用仍然失败了。看来javascript机制上,在obj1.getP这句话执行完之前,并没有把this正确指向obj1并且,this,也并没有指向function,而是window所以,如果一定要这样调用,可以用以下方法<html><head><script type="text/javascript"> var obj1 = new Object(); obj1.p = 1; (obj1.getP = function(){ alert(this.p); }).call(obj1);</script></head></html> var obj1=new Object(); obj1.p=1; obj1.getP=function(){ alert(obj1.p); }();orvar obj1=new Object(); obj1.p=1; obj1.prototype.getP=function(){ alert(this.p); }; 优先级的问题, 操作符=的优先级没有()高啊所以执行的顺序是, function(){}(); 然后将函数的返回值返回给obj1.getP 这显示不是你想要的你想要的是(obj1.getP = function(){})()即先=再() 求助, 这段代码提示object expected,怎么回事? jQuery加载问题 eval问题 关于iframe加载的问题,急,请指教 在线等!时间相加问题 获取坐标 帮忙改进成动态菜单效果,谢谢 当选择某个下拉框的时候,如何实现自动在后面跟一个文本框?高分!!! 求几条代码 有关对TABLE操作的几个问题? 求助条码枪扫描事件 如何让页面自动轮换显示?
var obj1=new Object();
obj1.p=1; obj1.getP=function(){
alert(this.p);
};function a(){
this.p = 5;
alert(this.p)
}
obj1.getP = a();//这明显是函数的返回值,而在a里面定义的属性p却成了function的属性
仔细想想吧。不一样的。
var obj1 = {
p: 1,
getP: function(){
alert(this.p);
}
}
obj1.getP();
我的意思其实很简单
obj1.getP=function(){}()
与obj1.getP()
在结构上面好像没有区别啊。
为什么后者的this是obj1
而前者我感觉貌似this是obj1.getp
obj1.getP=function(){
alert(this.p);
}();
上面那行代码 肯定是先执行后面的函数
而此时this关键字就指的是function本身 他没有P属性 肯定弹出undefined
函数执行完毕后 才将返回值传递给obj1.getP 且此时的getP已经不是obj1的方法了 只是obj1的一个属性罢了
看看下面的例子你就明白了
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>example</title>
</head>
<body>
<script>
var obj1=new Object();
obj1.p=1;
obj1.getP=function(){
alert(this.p);
return "aaa"
}();
document.write(obj1.getP)
</script>
</body>
</html>
虽然
obj1.getP=function(){
alert(this.p);
}();
这种调用法。肯定是错的。因为function(){}(),肯定先执行后面的function,然后再绑定到getP句柄,所以肯定不对但是,这种方法也不对,那就不可思议了。
<html>
<head>
<script type="text/javascript">
var obj1 = new Object();
obj1.p = 1;
(obj1.getP = function(){
alert(this.p);
})();</script>
</head>
</html>如果说,第一段代码调用失败。是因为getP绑定了function地返回值,那么我们看看这段
<html>
<head>
<script type="text/javascript">
var obj1 = new Object();
obj1.p = 1;
alert(obj1.getP = function(){
alert(this.p);
});</script>
</head>
</html>
加上括号以后,这绝对是函数句柄阿。
但是第2端调用仍然失败了。
看来javascript机制上,在obj1.getP这句话执行完之前,并没有把this正确指向obj1
并且,this,也并没有指向function,而是window所以,如果一定要这样调用,可以用以下方法
<html>
<head>
<script type="text/javascript">
var obj1 = new Object();
obj1.p = 1;
(obj1.getP = function(){
alert(this.p);
}).call(obj1);</script>
</head>
</html>
obj1.p=1;
obj1.getP=function(){
alert(obj1.p);
}();orvar obj1=new Object();
obj1.p=1;
obj1.prototype.getP=function(){
alert(this.p);
};
优先级的问题, 操作符=的优先级没有()高啊
所以执行的顺序是, function(){}(); 然后将函数的返回值返回给obj1.getP 这显示不是你想要的
你想要的是(obj1.getP = function(){})()即先=再()