Prototype takes issue with only one aspect of functions: binding.
Prototype은 기능의 관점에서 유일하게 갖고 있는게 'binding' 이다.

“Binding” basically determines the meaning, when a function runs, of the this keyword. 
While there usually is a proper default binding 
(this refers to whichever object the method is called on), 
this can be “lost” sometimes, for instance when passing a function reference as an argument.

Binding 이란 함수가 실행될때 this 객체를 결정하는 방법입니다. 
예를 들어 아규먼트로 함수 레퍼런스(참조변수)를 넘길때 때때로 "lost" 될 수 있어 이런일이 
발생하는 동안에 고유의 기본 바인딩 기능이 있다.
(this는 Method가 요청된 어떤 오브젝트든지 참조할 수 있다)


If you don’t know much about the this keyword in JavaScript, hop to the docs for the bind() 
method. 
The examples there will clear it up.

만약에 여러분이 javascript에서 this객체에 관해서 잘 모른다면 bind()에 대한건 넘어가세요.


--prototype.js--------------------------------------------------------------

Function.prototype.bind = function() {
  var __method = this, args = $A(arguments), object = args.shift();
  return function() {
    return __method.apply(object, args.concat($A(arguments)));
  }
}

Function.prototype.bindAsEventListener = function(object) {
  var __method = this, args = $A(arguments), object = args.shift();
  return function(event) {
    return __method.apply(object, [event || window.event].concat(args));
  }
}



--for example--------------------------------------------------------------

window.name = "www.pandora.tv";

Function Test() {
  return this.name;
}
Test(); //-> 'www.pandora.tv'

var foo = {
  name : 'www.google.com',
  otherTest : function() { return this.name }
}

foo.otherTest(); //-> 'www.google.com'

Function runFx(f) { f(); }

var fx = foo.otherTest.bind(foo);

runFx(foo.otherTest); //->
runFx(fx); //->
		
신고
Posted by Rhio.kim