JavaScript - получите владельца класса функции (метод)

Просто пропустите часть Excel - пользовательские формы Excel - это всего лишь версия для более бедных людей, как более надежные формы доступа. Кроме того, Access VBA идентичен Excel VBA - вам просто нужно изучить объектную модель Access. С простым приложением вам в любом случае не нужно будет писать много VBA, потому что в Access вы можете легко соединить все вместе.

7
задан Nick Craver 7 June 2011 в 13:17
поделиться

6 ответов

temp является вызывающим, но у него нет свойства __ class __ . Вы определили это только для теста .

0
ответ дан 7 December 2019 в 07:47
поделиться

В javascript нет классов. Вместо этого несколько объектов могут «владеть» одной и той же функцией. Например:

function myFun(){
  alert(this.name);
}

function Obj1(){
  this.name = "obj1";
}
Obj1.prototype.fun = myFun;

function Obj2(){
  this.name = "obj2";
}
Obj2.prototype.fun = myFun;
var obj1 = new Obj1();
var obj2 = new Obj2();
obj1.fun();
obj2.fun();
3
ответ дан 7 December 2019 в 07:47
поделиться

Функции не являются "собственными" в JavaScript. Функции являются объектами первого класса в JavaScript, что означает, что они могут передаваться, как и любые другие переменные, и назначаться как свойства многих объектов.

this внутри тела функции предоставит вам ссылку на объект, на котором функция был вызван, если был вызван как метод (например, myObj.myMethod () ) или через методы прототипа функции call () или apply () (например, myFunc.call (myObj) ). Внутри функции, вызываемой отдельно (например, myFunc () ), this обычно будет глобальным объектом (то же самое, что window в большинстве браузеров).

0
ответ дан 7 December 2019 в 07:47
поделиться

Ваш сценарий не совсем ясен, но вот несколько вариантов: -

 function globalFunc()
 {
     alert(this.__class__);
     //Note globalFunc now has access to much more.
 }

 function MyObject(){ }
 MyObject.prototype.test=function(){
   globalFunc.call(this);
 }
 MyObject.prototype.__class__=MyObject;

Чтобы добавить закрытие для обработки событий

MyObject.prototype.test = function(){
   var self = this;
   var elem = //get some element;
   //Not cross-browser but for illustration
   elem.addEventListener('click', fnEvent);
   function fnEvent() { globalFunc.call(self); }
   elem = null
}
2
ответ дан 7 December 2019 в 07:47
поделиться

вызывающий нестандартный и очень хрупкий; лучше избегать. Намного лучше передать значение явно:

MyObject.prototype.test= function() {
    element.addEventListener('click', function() {
        globalFunc(MyObject);
    });
};

или:

MyObject.prototype.test= function() {
    var myclass= arguments.callee.__class__;
    element.addEventListener('click', function() {
        globalFunc(myclass);
    });
};
0
ответ дан 7 December 2019 в 07:47
поделиться

I don't understand well what you are trying to do, but here's an idea that could inspire you something.
The "constructor" property helped me well when I was trying to use JS as a OO language.

o.constructor will give you the myObject function reference.

But in my opinion, you should give functional programming a try instead of OO to get the most from Javascript

2
ответ дан 7 December 2019 в 07:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: