Прежде всего, если вы хотите использовать строгий режим, то вы должны поставить var
(или let
или const
) перед вашим generalClass
и $this
.
Как что:
(function() {
"use strict";
var generalClass = function() {
this.ip = false; // page page
this.ie = false; // IE
this.pp = false; // portfolio page
this.om = false; // organize menu
this.wc = false; // shop
this.sh = false; // side header
// So we can get the correct $this if needed
var $this = this;
this.__init();
};
generalClass.prototype = {
__init: function($check) {
console.log('$this', $this);
// Run functions
$this.__format();
$this.__resize();
}
}
var instance = new generalClass();
}());
(я изменил $(document).ready()
к IIFE, так что я мог запустить его в консоли Plus, я создал экземпляр вашего класса.).
Что происходит сейчас? $this
внутри __init()
не определен. Вам нужно будет определить $this
внутри __init()
, но вот в чем проблема: что ему нужно назначить?
В вашем примере __init()
вы действительно можете позвонить this
вместо $this
, но, как вы уже указали, это не всегда возможно.
Но позвольте мне проиллюстрировать это с более абстрактным примером:
(function() {
var GeneralClass = function() {
this.foo = [1, 2, 3];
this.bar = 4;
this.baz = [5];
};
GeneralClass.prototype.someFunction = function() {
console.log('foo', this.foo); // [1, 2, 3]
console.log('bar', this.bar);
var self = this; // storing reference to *this* (oobject for later)
this.baz.forEach(function (item) {
console.log('baz?', this.baz); // undefined, because *this* means here this.baz, and there is no this.baz.baz
console.log('baz!', self.baz); // [5]
});
console.log('foo * bar');
this.foo.forEach(function (item, index) {
console.log('item', index, 'value', item * self.bar);
});
console.log('Both accesible here', this.bar, self.bar);
};
var generalClassInstance = new GeneralClass();
generalClassInstance.someFunction();
}());
Здесь я задаю this
к self
(лично я бы использовал $this
для $(this)
, но это только условность так делать, как вам угодно, до тех пор, поскольку вы последовательны). Теперь функции, называемые внутри моей функции, могут использовать self
, который работает как ссылка на внешний this
. И если бы я назвал другую функцию в моей подфункции, она все равно указывала бы GeneralClass
this
.
Надеюсь, вас заинтересовали в первую очередь.
Что вы пытаетесь сделать в первую очередь? – Hackerman
Возможный дубликат [javascript - доступ к переменным частного члена из определенных прототипов функций] (http://stackoverflow.com/questions/436120/javascript-accessing-private-member-variables-from-prototype-defined-functions) – JJJ
Проверить этот ответ связан с ** режимом «использовать строгий» **: [Что делает «использовать строгий» в JavaScript, и каковы причины этого?] (http://stackoverflow.com/a/11496488/2247494) – jherax