2015-04-14 4 views
3

Met код первый раз:что делает метод this.method.bind (this)?

var Controller = function($scope){ 
    this._scope = $scope; 
} 

Controller.$inject = ['$scope']; 

Controller.prototype.augmentScope = function() { 
    this._scope.a = { 
     methodA: this.methodA.bind(this) 
    } 
} 

Я действительно не понимаю, что это точка. Любые объяснения?

+1

Что именно вы не понимаете? '.bind (это)'? Вы прочитали [** документацию **] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) о '.bind'? Что еще остается непонятным после того, как вы его прочитали? –

+0

делает 'methodA' не методом' a', а автономной функцией – dandavis

+0

создается объект с именем 'a', в котором есть 1 элемент, функция' methodA', которая определена в объем 'a'. связывание связано с передачей этого значения этой функции. поэтому вы смотрите на нечто более похожее: 'this.methodA = function() {}; var a = {methodA: this.methodA.bind (this)}; ' – Fallenreaper

ответ

0

Предполагается, что в области ограничения (если ни один из них не будет в глобальном масштабе, таком как window), существует метод, называемый methodA. Опять же, потому что это действительно включенная область охвата), она напомнит ей и назначит ей использовать также через объект а. Таким образом, вы можете выполнить его: methodA() или a.methodA()

Edit объяснить закрытие: Хотя Javascript очень похож на Java/C++ в синтаксисе это совсем другое, чем оба из них в том смысле, что, когда функция конкретизируется как объект, он запоминает область, в которой он был создан. Я бы очень рекомендовал, чтобы кто-то делал больше, чем случайный JS (если есть такая вещь), чтобы посмотреть на this article. this в JS будет deffer зависит от того, был ли он создан внутри , созданный экземпляр функция - AKA: new MyClass(). Обращаясь к буквальному объекта, например:

var myObj={a:this.b} 

не будет создавать новый this и по умолчанию относятся к области видимости. Если ни один не был создан, он будет глобальным объектом, например window, в браузере

+0

* «Предполагается, что в области закрытия (если ни один из них не будет в глобальном масштабе, таком как окно)» * Какое закрытие? Он фактически предполагает, что значение 'this' имеет свойство' methodA'. –

+0

См. Отредактированный ответ. –

+0

Итак, мы даем ссылку на локальную область для внешнего доступа (из области $)? – nik

Смежные вопросы