关于如何实现的问题
javascript吧
全部回复
仅看楼主
level 2
刘述熙 楼主
有一个函数用来返回对象:
function return(){
var ret = {} //对象原型
ret.a = 0
ret.b = document.getEleById("id")
ret.b.onclick = function(){
/////这里想调用ret.a的值怎么调用?
}
return ret
}
var a = return()
大神求帮忙!
2020年08月31日 13点08分 1
level 13
直接写 ret.a 就好,因为你的 onclick 回调和 ret 在同一个函数作用域下,可以访问到 ret ,他只是被赋值到了 onclick 属性上而已,不影响执行效果。还有就是,return 这个词是 js 关键词,不能用作函数名和变量名,请注意更正。
2020年08月31日 18点08分 2
[大拇指]
2020年09月01日 02点09分
ret是对象,似乎只能用this指针......
2020年09月05日 12点09分
level 13
第一,你可能对对象原型有什么误解。
对象原型是用在以 new 关键字调用函数来构造对象生成的对象上的。
function Person(name){
this.name=name
}
Person.prototype.age=10;
Person.prototype.intro=function(){
return "我叫"+this.name+",我"+this.age+"岁了。"
}
对象原型是那些专门用来以 new 关键字构造对象的函数上存储的一个名为 prototype 的对象,这个对象里存储着一个规定的对象结构上一定有的属性以及它的初始值。
比方说我要创造一个人,好,一个人应该有什么?名字、年龄等等。每个人的身上的这些概念都是一样的而且大家都有,那我在每创造出一个人的时候何必每次都要去定义一遍这些概念,直接弄个大概的模子,然后再每次在这个模子上再去定义那些不一样的地方不就好了?
对于 javascript 来说也是一样,把那些一模一样的东西写进代码逻辑里,每次都完完全全再来一遍效率实在是太低了,而且对象上那些一模一样的函数还吃那么多内存空间,实在是不能忍受。解决这个问题的对应方法就是对象原型。对象原型最大的好处就在于,对于同一类对象上面那些一模一样的结构,在生成对象的时候只需要搬过去就可以了,而且对于对象上的方法而言,大家要做的都是一样的,犯不着每个对象上面都要生成一个函数,那样太占空间了,大家直接共用一个函数(rbq?),创建对象的时候只需要把函数的地址搬过去就好,即块又省空间,如果函数要访问不同的对象只需要一个 this 就好了,实在大快人心。
var
lsp
=new Person("
老色批
") ↓
Person {
name:"老色批",
(下面的是原型属性,在浏览器控制台里是隐藏的,因为这些不是属于单个对象独有的)
age:10,
intro:function(){
return "我叫"+this.name+",我"+this.age+"岁了。"
}
}
lsp.intro() //"我叫老色批,我10岁了。"
所以,首先你上面的写法都不属于对象原型,没有使用 this 的意义。当然用了也无妨,因为效果是一样的。
第二,你是想在元素的事件函数里访问外面那个装着元素的对象的话,那我告诉你用原型方法还有 this 是不可能的,因为除了原型方法用到 this ,事件函数也会用到 this,事件函数里的 this 指向的是触发事件的那个对象,也就是元素(注意元素在js里也是对象),所以你只能是通过作用域链,在构造对象的时候把 this 赋值给一个变量,然后在事件函数里访问这个变量。
当然,你目前的写法也不是对象原型写法,而且对象原型也办不到,所以还是乖乖用 ret.a 吧。
2020年09月05日 13点09分 6
1