关于 this

lanytin 2010-09-13 06:45:02
我自己写了个对象,如下:

obj={
a :[],
b :{},
c : function(){
……
},
d : function(){
obj.a.push('3');
obj.c();
}
};


请问这个obj如何定义,使在c、d函数里面,直接this 调用该对象的变量?
也就是使this指向Obj。
小弟 对prototype理解不深,不知道是不是通过它实现。
...全文
158 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lanytin 2010-09-17
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 rainsilence 的回复:]

你如果是在object中,直接this就ok了
[/Quote]
虽然在object中,直接用this,但是有些时候,可能this的指向会变。
使用createDelegate方法,问题解决了。
rainsilence 2010-09-14
  • 打赏
  • 举报
回复
你如果是在object中,直接this就ok了
lanytin 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 rainsilence 的回复:]

你写的那个
var obj = {};
就等于var obj = new Object();

而Object并没有prototype。
只有Function才有prototype

在Object里,this永远指向他的挂靠对象。因为他可以看成是已经实例化的对象
在Function里
JScript code
function Test(name) {
this.n……
[/Quote]
有点理解了,
但还是不知道怎么解决我的问题……呵呵
lanytin 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yuyizhao198 的回复:]

this.a.push('3');
this.c();
[/Quote]
这种方法当然试过了,里面的this,指向的不是obj这个对象。
rainsilence 2010-09-13
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 brainwkernighan 的回复:]

this是对操作者的引用。
比如你定义一个 var i = 0; // 此时有隐藏的this,this为window
你定义一个 var c = function(){} // 此时的this仍然为window。谁的函数,window的
但是比如lz上面定义的方法 var obj = {a:1,b : function(){return this.a++;}}
如果执行一句 ojb.……
[/Quote]

你这样说,lz怎么看得懂。
this代表离他最近的对象,在最顶级函数调用的时候,代表window

例1:
function test() {
alert(this);
}
alert(this); // window
new test();// Object(代表new出来的object)
test(); // window

例2:
function Father(name) {
this.name = name;
}
function Child(name) {
this.Father = Father;
// Father的this挂靠到Child上,形成对象冒充(也就是说,Father中的this,就是现在看到的this)
this.Father(name);
delete(this.Father);
}
alert(new Child("123").name);

brainwkernighan 2010-09-13
  • 打赏
  • 举报
回复
this是对操作者的引用。
比如你定义一个 var i = 0; // 此时有隐藏的this,this为window
你定义一个 var c = function(){} // 此时的this仍然为window。谁的函数,window的
但是比如lz上面定义的方法 var obj = {a:1,b : function(){return this.a++;}}
如果执行一句 ojb.b(); 函数被执行一般都是被副本被拷贝至内存空间,谁的内存空间,this的,this是谁,obj。所以在编译时this被替换成obj。


如果 var f = function () { return this.a ;} ; f(); // 这样就会报错,window没有a属性。
如果把 obj.f =f ; obj.f(); // 这样就好了,因为 this 有人认领了。


this可以随便使用,但是不能随便调用。
rainsilence 2010-09-13
  • 打赏
  • 举报
回复
你可以把function Test看成是构造函数。把Test看成是类,Test.prototype则是public方法和类级属性的集合
rainsilence 2010-09-13
  • 打赏
  • 举报
回复
你写的那个
var obj = {};
就等于var obj = new Object();

而Object并没有prototype。
只有Function才有prototype

在Object里,this永远指向他的挂靠对象。因为他可以看成是已经实例化的对象
在Function里
function Test(name) {
this.name = name;
}
Test.prototype = {
sayHello: function() {
alert(this.name);
}
};

new Test().sayHello();
function必须定义在原型上,this才能指向对象。而不是函数对象
MrSLin 2010-09-13
  • 打赏
  • 举报
回复
你写的也对,或者

obj={
me:this,
a :[],
b :{},
c : function(){
……
},
d : function(){
this.a.push('3');
this.c();
}
};
2244079 2010-09-13
  • 打赏
  • 举报
回复

obj={
a :[],
b :{},
c : function(){
……
},
d : function(){
this.a.push('3');
this.c();
}
};


你写的这段代码就可以直接使用this替代obj
hnwlh 2010-09-13
  • 打赏
  • 举报
回复
楼上有测试?
yuyizhao198 2010-09-13
  • 打赏
  • 举报
回复
this.a.push('3');
this.c();
shenzhenNBA 2010-09-13
  • 打赏
  • 举报
回复
obj的定义正如你写的,

87,901

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧