Javascript上下文

原文链接:http://www.cnblogs.com/LiuXianBlog/p/3501699.html
var User = {
  count: 1,

  getCount: function() {
    return this.count;
  }
};

console.log(User.getCount());

var func = User.getCount;
console.log(func());

  这种情况下,正确的答案是1和undefined。你会很吃惊,因为有很多人被这种最基础的上下文问题绊倒。func是在winodw的上下文中被执行的,所以会访问不到count属性。我向侯选人解释了这点,然后问他们怎么样保证User总是能访问到func的上下文,即返回正即的值:1

  正确的答案是使用Function.prototype.bind,例如:

var func = User.getCount.bind(User);
console.log(func());

  接下来我通常会说这个方法对老版本的浏览器不起作用,然后让侯选人去解决这个问题。很多弱一些的侯选人在这个问题上犯难了,但是对于你来说雇佣一个理解apply和call的侯选人非常重要。

 Function.prototype.bind = Function.prototype.bind || function(context){
      var self = this;

      return function(){
        return self.apply(context, arguments);
      };
    }

 

转载于:https://www.cnblogs.com/LiuXianBlog/p/3501699.html

上一篇:剑指offer 替换空格


下一篇:SQL Server在所有表中查找内容(在整个库搜索内容)