可是你不是说,”在这些书上签上我的名字“吗?

一个叫Jack的巨星出了一本书,为了带动销量,他决定给每一个要出售的书签名。可是,他当然没有这个时间来做这种事,于是他决定雇一个叫Tom的人来帮他做这件事,他对Tom说,在这些书上签上我的名字。于是Tom就照着做了:

var star = {
	_name : "Jack",
	hirePerson : function(person) {
		person.signBook = function(book) {
			book.sign("This book is from " + this._name);
		}
	}
};
var tom = {
	_name : "Tom"
};
var book = {
	sign : function(name) {
		console.log(name);
	}
};
star.hirePerson(tom);
tom.signBook(book);

结果却发现书上签的却是:

This book is from Tom

Jack愤怒了,你怎么搞的,怎么书上签的是你的名字!Tom很无辜的说,可是你不是说,”在这些书上签上我的名字“吗?

"Oh, shit,我的名字!"

"是我的名字啊!"

于是Jack只好换一种说法,在这些书上签上Jack的名字。

	hirePerson1: function(person) {
		var jack = this;
		person.signBook = function(book) {
			book.sign("This book is from " + jack._name);
		}
	}

这下终于对了:

This book is from Jack

但是后来狗仔队知道了Jack找人顶替签名的事,Jack被人非议,于是他只好自己签名:

   hirePerson2: function(person) {
        person.signBook = this.bind(function(book) {
            book.sign("This book is from " + this._name);
        }, this);
    },
   bind: function(fn, context) {
      return function() {
        return fn.apply(context, arguments);
      };
    }

  

原文地址:https://www.cnblogs.com/zhengwenwei/p/2686097.html