如何在JavaScript中使用LinkedIn登录API保持类范围?

如何在JavaScript中使用LinkedIn登录API保持类范围?,javascript,scope,linkedin,Javascript,Scope,Linkedin,我正在制作一个快速LinkedIn登录插件,但我不知道如何将类的JS范围保留在回调方法中 HTML: <script type="IN/Login" data-onAuth="linkedInLogin.linkedInRequest"></script> 问题出在myinit函数中,作用域是类作用域,可以访问方法和属性,但在linkedInRequest中,我的作用域是窗口作用域。我希望它也是类的作用域,因此我可以将其拆分为多个方法。请注意,JavaScript没有类

我正在制作一个快速LinkedIn登录插件,但我不知道如何将类的JS范围保留在回调方法中

HTML:

<script type="IN/Login" data-onAuth="linkedInLogin.linkedInRequest"></script>

问题出在my
init
函数中,作用域是类作用域,可以访问方法和属性,但在
linkedInRequest
中,我的作用域是窗口作用域。我希望它也是类的作用域,因此我可以将其拆分为多个方法。

请注意,JavaScript没有类!如果你试图装作这样,你只会把自己弄糊涂。
参数的传递取决于函数的调用方式,而不是函数的定义方式,显然LinkedIn脚本不会传递它。您可以通过使用另一个函数包装它来绕过它,该函数可以根据您的意愿调用它,或者使用该方法

您的
linkedInLogin
变量是传递给
ready()
的回调的本地变量,对于LinkedIn脚本不可见

您可能希望执行以下操作:

function LinkedInLogin() { }

LinkedInLogin.prototype = {
    init : function() {
        console.log(this);
    },

    linkedInRequest : function() {
        console.log(this);
        IN.API.Profile("me")
          .fields(['firstName', 'lastName', 'email-address', 'picture-url'])
          .result();
    }
};

var ll = new LinkedInLogin(),
    linkedInRequest = ll.linkedInRequest.bind(ll);

$(document).ready(function() {
    ll.init();
});
…然后简单地

<script type="IN/Login" data-onAuth="linkedInRequest"></script>
…然后:

<script type="IN/Login" data-onAuth="LinkedInLogin.linkedInRequest"></script>

var LinkedInLogin = {
    init: function() { console.log(this); },
    linkedInRequest: function() {
        console.log(this);
        IN.API.Profile("me")
          .fields(['firstName', 'lastName', 'email-address', 'picture-url'])
          .result();
    }
};

LinkedInLogin.linkedInRequest
  = LinkedInLogin.linkedInRequest.bind(LinkedInLogin);

$(document).ready(function() { LinkedInLogin.init(); });
<script type="IN/Login" data-onAuth="LinkedInLogin.linkedInRequest"></script>