javascript - 尝试创建返回函数的对象?

标签 javascript oop

我尝试了一些不同的东西,最终得到了这些代码..

var f1 = function() {
             this.x = 10;
             this.innerf = function() {    console.log(this.x);   }
         }

var of1 = new f1();
of1.innerf();

var f2 = function() {
             return function() {
                 this.x = 10;
                 this.innerf = function() {    console.log(this.x);    }
             }
         }

var of2 = new f2();
of2.innerf(); 

抛出错误??! of2.inner 不是一个函数

因此,我的匿名函数将相同的函数体返回给我的变量。 为什么我仍然无法实例化?

最佳答案

第一部分返回一个对象,您可以调用该对象 innerf方法。

第二部分返回一个函数,如果调用它,该函数将返回一个对象。但你没有。

这会起作用。调用函数 f2()。它的返回值是匿名函数。然后,用new <return value of f2>() ,您可以创建该对象的实例。

var f2 = function() {
             return function() {
                 this.x = 10;
                 this.innerf = function() {    console.log(this.x);    }
             }
         }

var of2 = new (f2())();
of2.innerf();

// The two lines above can also be written as:

var of3constructor = f2(); // This returns the inner anonymous function.
var of3 = new of3constructor(); // This creates an instance by invoking the anonymous function.
of3.innerf();

关于javascript - 尝试创建返回函数的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31013207/

相关文章:

javascript - 洪水填充算法选择具有最少邻居数的像素

javascript - Angular 提供者错误 - 必须定义 $get 工厂方法

java - Hibernate - 如何映射表示集合的对象

java - Activity 是 MainFragmentListener 的实例,是真的吗?

java - "Data Encapsulation"是什么意思?使用私有(private)数据字段或方法?

oop - 在 SmallTalk - Squeak 中打印带有分隔符的集合的正确方法?

javascript - jQuery - 动态创建隐藏的表单元素

javascript - 更改时的 setState

javascript - 正则表达式javascript如何检查aa_bb

ios - 为什么应用委托(delegate)类无法初始化?