如何查找函数所属的对象
How to find the object a function belongs to?
给定一个函数,有没有办法找出保存它的对象?
var dog = {
bark: function() { alert('dfd') },
name: 'Bill'
}
function getNameFromBark(barkFunc){
//How to implement this method?
}
getNameFromBack(dog.bark); //I would like this to return Bill.
为什么不干脆dog.name
?
函数可以绑定到对象。它可以使用 this
关键字访问该对象的属性。您可以将函数与 bind
函数重新绑定,这会更改 this
的值。
据我所知,没有办法问一个函数它绑定了什么。
喜欢:
var my_func = dog.bark; // removing `dog` from the reference
my_func.getBoundObject().name; // would return Bill
似乎您可以在此处使用原型:
function Dog(name) {
this.name = name;
}
Dog.prototype = {
getName: function() {
return this.name;
},
bark: function() {
alert('dfd');
}
};
var dog = new Dog('Bill');
console.log(dog.getName()); //=> 'Bill'
按照您编写代码的方式,dog.bark
只是一个函数引用,一旦您将其作为dog.bark
传递,就与任何特定对象没有关联,因此当您像这样传递它时,就无法从对象中获取任何其他数据:
getNameFromBark(dog.bark);
在getNameFromBack()
内部,传递的参数只是一个函数。 javascript 中的方法只是对象的属性,一旦你检索到属性值,它就只是一个函数。 没有与函数本身关联的对象引用。 因此,除了仅使用 dog.name
来引用全局对象dog
之外,您无法以任何其他方式从该函数中获取dog.name
。
现在,您可以重新构建代码以允许这样做。 例如,您可以传递对象而不是函数:
getNameFromBark(dog);
然后,在 getNameFromBark()
中,您可以从传入的对象访问 .name
属性。
或者,在对对象系统的滥用中,您可以在函数本身上放置一个包含名称的属性:
var dog = {
bark: function() { alert('dfd') },
name: 'Bill'
}
// assign name property to the bark function too
dog.bark.name = dog.name;
function getNameFromBark(barkFunc){
//How to implement this method?
return(barkFunc.name);
}
getNameFromBack(dog.bark); //I would like this to return Bill.
但是,这可能不是设计代码的最佳方式。 如果我们理解了您试图解决的真正问题,我们可能会建议一个更好的面向对象的体系结构,它不会重复属性。
相关文章:
- 创建对象函数原型和代码是错误的
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- 如何从onclick字符串中引用javascript对象函数
- 更改对象函数仅用于示例
- javascript和jQuery的嵌套对象函数中的变量范围
- 将对象函数传递给请求动画帧时丢失对象引用
- 对象函数返回函数而不是值
- 使用onclick调用属性对象函数
- javascript拉斐尔对象函数传递
- 如何从onClick事件调用对象函数
- 可以't获取具有“t”的对象变量;这个“;由setTimeout()函数调用的对象函数中的属性
- 对象没有't继承父对象函数
- 调用父对象函数
- "这个“;对象函数内部的引用
- 将变量添加到对象函数调用的末尾
- 传单错误:对象函数没有方法'createIcon'在LayerGroup中创建自定义图标标记时
- TypeError:对象函数Object(){〔本机代码〕}没有方法'方法'
- 挖空 - 单击绑定到对象函数 - 范围问题
- 类型错误: 对象函数...没有方法“打开”
- JavaScript 对象函数