this в javascript

12
[Удален]
823

В общем я не знаю как объяснить это словами, попробую просто код показать


function MyObject(obj)
{
this.method=function(...)
{
...
}
this.ctx=SomeAnotherObject;

this.ctx.newMethod=function()
{
//В этом контексте this ссылается на SomeAnotherObject
//как ЗДЕСЬ обратится к методам нового объекта (MyObject), который был this на уровень выше?
}

}
[Удален]
#1

neolord, нюбишь чтоли или прикаываешься? :)

function MyObject(obj)

{

this.method=function(...)

{

...

}

this.ctx=SomeAnotherObject;

this.ctx._base = this;

this.ctx.newMethod=function()

{

this._base.method();

//В этом контексте this ссылается на SomeAnotherObject

//как ЗДЕСЬ обратится к методам нового объекта (MyObject), который был this на уровень выше?

}

}

dma84
На сайте с 21.04.2009
Offline
168
#2

MyObject.method

[Удален]
#3
bearman:
neolord, нюбишь чтоли или прикаываешься? :)

function MyObject(obj)
{
this.method=function(...)
{
...
}
this.ctx=SomeAnotherObject;
this.ctx._base = this;

this.ctx.newMethod=function()
{
this._base.method();
//В этом контексте this ссылается на SomeAnotherObject
//как ЗДЕСЬ обратится к методам нового объекта (MyObject), который был this на уровень выше?
}

}

До такого хода мысли я не додумался) А нативных способов нет?

dma84:
MyObject.method

Не, не канает.

[Удален]
#4

neolord, это и есть натив =))) жс какбы сам по себе не ооп язык то, то есть он ООП но какой то ООП старый, но мне нравится именно жс реализация его )))))))))) в общем натив методов я не знаю :)

bearman добавил 19.06.2009 в 15:04

и сомневаюсь что они есть, да и этот метод точно сработает во всех браузерах, а с "нативами" имхо легко нарваться увы(

[Удален]
#5

ну лады, спасибо =)

[Удален]
#6

neolord, не за что

Коля Дубр
На сайте с 02.03.2005
Offline
153
#7

<html>

<head>
<script type="text/javascript">

var SomeAnotherObject = {test:'test!'};

function MyObject() {
this.west = 'west!';
var _base = this; // Эта штука будет доступна везде внутри метода
this.ctx=SomeAnotherObject;
this.ctx.newMethod=function() {
// test! | west!
alert( this.test + ' | ' + _base.west);
}
this.check = function() {
this.ctx.newMethod();
}
}
var testObj = new MyObject();
</script>
</head>
<body>
<input type="button" value="GG" onClick="testObj.check()" />
</body>
</html>

Та же фигня, что предложил bearman, только _base можно не пихать в свойство SomeAnotherObject, он и так будет доступен во всем коде внутри MyObject. Я, например, так делаю ajax-обработчики.

Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
[Удален]
#8

Коля Дубр, хм ... я указал на такой же пример)) но чето не был уверен что так насквозь сработает))) ну и думал что он хотел множественно это использовать, иерархию предков чтобы можно было восстановить ...

в итоге да, мой и дубра варианты похожи сильно :)

в общем я соглашусь что дубра вариант также безупречен как и мой))

Коля Дубр
На сайте с 02.03.2005
Offline
153
#9

bearman, да фиг знает, безупречен или нет - не понятно же, что ТС в итоге сделать хочет :) Вообще-то мы оба предложили грязный хак, а ТС вероятно надеялся получить что-то типа parent::do(), где parent - нативная конструкция языка. Так вот, фиг бы там: в JS метод понятия не имеет, кто и где его определил - философия такая. Зато видит окружение определившего, этим можно пользоваться.

[Удален]
#10

Коля Дубр, жс прикольно имхо))) неплохо он был реализован одно могу сказать ... все есть и по сей день

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий