有没有办法迭代函数作用域内的公共方法
Is there a way to iterate over public methods inside a function scope?
请考虑以下代码:
var Foo = function () {
this.bar = [];
this.hello = function () {
this.name = "world";
};
};
for (var property in Foo) {
alert(111);
}
它什么都不做。有没有办法迭代 Foo 的属性和公共方法?如果 Foo 是对象文字,它将起作用,如下所示:
var Foo = {
bar: [],
hello: function () {
this.name = "world";
}
};
for (var property in Foo) {
alert(111);
}
但我更希望它是一个函数。
我想这样做的原因是我想使用 mixin 模式从 Foo 扩展。
http://jsfiddle.net/ChU2V/
你需要一个实际的Foo
实例才能正常工作:
var foo = new Foo();
for (var property in foo) {
alert(111);
}
否则,属性只是"虚拟"的,因为它永远不会到达程序代码。
除此之外,您还可以在原型上定义属性:
var Foo = function() {};
Foo.prototype = {
bar: [],
hello: function () {
this.name = "world";
}
};
然后循环Foo.prototype
.
最后,作为一种动态语言,JS还可以让你完全疯狂,如果你必须:
var possible_props = Foo.toString().match(/'bthis'.'([a-zA-Z0-9_]+)'s*=/g);
// will yield an array similar to this:
// ["this.bar =", "this.hello ="]
但请注意,这很容易出错,不建议这样做。例如,它不会捕获这样的情况:
var that = this;
that.baz = null;
for (var property in new Foo()) {
console.log(property);
}
尝试
var Foo = function () {
this.bar = [];
this.hello = function () {
this.name = "world";
};
};
for (var property in new Foo() ) {
alert(111);
}
请注意new Foo()
。
小提琴更新。
http://jsfiddle.net/sujesharukil/ChU2V/2/
var fooInstance = new Foo();
for(var property in fooInstance){}
您必须创建Foo的实例才能从中获取属性。
相关文章:
- 在put方法之前从作用域获取数据
- Visual Studio展开方法和所有子作用域或仅折叠方法
- 为什么't我的角度控制器'在其某个方法内的作用域中的依赖项
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 尝试将变量传递到对象中时的作用域问题'的方法构造函数
- 在对象类上实现 jquery 作用域的最佳方法
- 从多个控制器上的指令访问作用域的正确方法
- 有没有办法迭代函数作用域内的公共方法
- 使用类/构造函数与变量方法时的作用域不同
- JavaScript 中的范围(为什么在 $.post() 方法数组的作用域是本地的?)
- 描述从回调方法获取正确的作用域
- 作用域问题反应父子方法ES6
- JavaScript——如何将作用域传递给reader.onload方法
- 数组排序方法内部的作用域
- 作用域或控制器上的Angular js difference方法
- 在全局作用域上调用Object.prototype方法
- 使用 JSON 对 js 对象进行分级/解析时,返回的方法中的函数作用域会丢失
- 用JavaScript编写块作用域的最短方法是什么
- 全局作用域映射的Javascript方法
- Javascript嵌套原型方法作用域