Jump to content
  • 0

разделение интерфейсов


cyklop77
 Share

Question

объясните пожалуйста подробно, нужно ли при написании jq-плагина разделять внешний и внутренний интерфейс? или этого делать не стоит потому что функции внутри плагина в любом случае недоступны извне?

пример.

при написании jq-виджета я разделил внешний и внутренний интерфейс при помощи

var self = this;

. то есть закрыл доступ извне к максимально возможному количеству методов

при написании jq-плагина я этого не делал

Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Что такое внешний и внутренний интерфейсы? :)

Как это ты что-то там закрыл, если self - всего-лишь ссылка на this? http://jsfiddle.net/bwXLY/

Или я чего-то не понимаю?

Так то это так, но! Основной смысл в том, что свойство селф становится в данном случае приватным, т.е его не получить даже из самого экземпляра класса: http://jsfiddle.net/bwXLY/2/ . Он становится как бы "закрытым".

Только зачем это надо я не понимаю :D

Edited by moron
Link to comment
Share on other sites

  • 0

Так то это так, но! Основной смысл в том, что свойство селф становится в данном случае приватным, т.е его не получить даже из самого экземпляра класса: http://jsfiddle.net/bwXLY/2/ . Он становится как бы "закрытым".

Только зачем это надо я не понимаю :D

У вас в голове все перепутано. Во-первых, не из "экземпляра класса", а из объекта (в js прототипное наследование). Во-вторых, вы пытаетесь получить доступ к "приватному" свойству self не из объекта, а снаружи. this в этом случае тоже недоступен :)

я этим руководствовался. видимо, я плаваю в вопросе сильно. пните в нужном направлении пожалуйста

Читай внимательнее :) Сначала объявляется локальная переменная self, содержащая ссылку на объект this. Потом создается "приватный" метод:

function Private() {}

Внутри этой функции this будет указывать... как думаешь, на что? :)http://jsfiddle.net/bwXLY/3/

Чтобы передать ссылку на нужный объект в "приватный" метод, можно воспользоваться несколькими способами. Первый - описан в уроке по твоей ссылке. У функции есть доступ к переменной self, которую она может использовать как ссылку на "свой" объект: http://jsfiddle.net/bwXLY/4/

А можно еще вот так: http://jsfiddle.net/bwXLY/5/

Рекомендую хорошенько ознакомиться: http://javascript.ru...ect/thiskeyword

Еще полезное чтиво: http://learn.javascript.ru/this

  • Like 1
Link to comment
Share on other sites

  • 0

this в этом случае тоже недоступен :)

this это указатель контекста исполнения, он будет ссылаться на объект и в конструкторе и в самом объекте. А селф будет объявлен в области видимости функции-конструктора и потому не доступен в объекте. Разве нет?

Link to comment
Share on other sites

  • 0
this это указатель контекста исполнения, он будет ссылаться на объект и в конструкторе и в самом объекте. А селф будет объявлен в области видимости функции-конструктора и потому не доступен в объекте. Разве нет?

На примерах видно, что доступен. Я не жабаскриптер и плаваю в таких вопросах, но по-моему переменная self доступна в объекте благодаря замыканию, т.к. переменная нужна функции, объявленной внутри конструктора, и сборщик мусора ее не трогает. Поправьте пожалуйста, если я неправ.

Link to comment
Share on other sites

  • 0

Он доступен только через функцию, т.к в ее свойстве [[scope]](только в ее цепочке видимости) есть self, но напрямую из объекта self не доступен. Да это пример замыкания.

Edited by moron
Link to comment
Share on other sites

  • 0

http://www.books.ru/books/javascript-shablony-fail-pdf-864682/?show=1

Основной смысл в том, что свойство селф становится в данном случае приватным

self нужен только, чтобы ссылку на объект не потерять

А можно еще вот так: http://jsfiddle.net/bwXLY/5/

или так http://jsfiddle.net/bwXLY/6/

http://learn.javascript.ru/bind#современный-метод-bind

this это указатель контекста исполнения, он будет ссылаться на объект и в конструкторе и в самом объекте. А селф будет объявлен в области видимости функции-конструктора и потому не доступен в объекте. Разве нет?

будет. Объекты передаются по ссылке http://jsfiddle.net/bwXLY/7/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy