【问题标题】:Why can't I create a method to the function who's scope I'm within?为什么我不能为我所在范围的函数创建一个方法?
【发布时间】:2016-04-05 08:21:09
【问题描述】:

我正在尝试创建一个绑定到全局命名空间的对象,然后在该对象中创建引用自身的方法。我希望在创建对象时创建所有方法,并且定义了obj,但方法不是(基于底部的控制台输出)。 return this; 不会将方法本身返回给调用吗?还是我在 obj 函数内部调用 this.methd 的问题不正确?如果这是重复的,我很抱歉,看起来类似的问题总体上不像我的,接近但没有雪茄。

(function(window, undefined){
  var obj = function(){
    this.methd = function() {
      return this;
    };
  }
window.obj = obj;
})(window);

function defined(value) {
  var def = value ? 'pass' : 'fail';
  return def;
}
console.log(defined(obj))
console.log(defined(obj.methd))

//Output:
//pass
//fail

【问题讨论】:

    标签: javascript methods javascript-objects


    【解决方案1】:

    您将window.obj 设置为对函数的引用。在该函数运行之前,methd 不会在任何地方定义,无论该函数的内容或返回的内容如何。

    如果您将其作为构造函数调用以创建实例,methd 将被定义,但仅限于该特定实例

    var b = new obj();
    console.log(defined(b.methd)); //pass
    

    或者,仅将函数作为普通函数调用将使用this(即全局对象,或window)的当前值,并在该对象上创建methd 函数:

    obj();
    console.log(defined(window.methd)); //pass
    

    【讨论】:

    • 我完全明白为什么它现在不起作用了,谢谢,这基本上回答了我的问题,但现在我有一个新问题,我应该将 'obj();' 放在哪里?添加它什么也没做,我将它包含在 obj 定义之外,但包含在自我唤起函数中。第一种方法有效,但我现在也有兴趣了解第二种方法。
    • @John 我不完全确定您要实现什么,但 JavaScript 中的函数是对象,因此可以具有属性。因此,您可以直接将methd 函数作为属性分配给obj 函数对象like this
    • 我正处于创建各种小部件的开始阶段,该小部件要求用户仅将单个 js 文件添加到目录并将脚本标记添加到 HTML。并且在页面加载时完全预先建立所有功能以及所有方法都可以从脚本用户将在外部脚本中创建的任何代码访问。不过现在主要是,根据您提供给我的信息,我只是对为什么添加 obj(); 不起作用感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    • 2016-03-11
    • 2021-01-22
    • 1970-01-01
    • 2013-10-05
    • 2016-04-08
    相关资源
    最近更新 更多