从 javascript 的更高级别访问标识符?
accessing identifiers from an extra level higher in javascript?
我正在 JavaScript 中开展一个项目,我需要能够访问学究对象的变量,该变量是使用子对象中的函数内的构造函数创建的。
var myObject = function(){
this.foo = 'stuff',
this.bar = {
bit: 'things',
bite: function(){
return this.this.foo;
}
}
}
var test = new myObject();
test.foo = 'blarg'
test.bar.bite() //<-- this should return 'blarg'
此时我很迷茫。我希望在这个特定的应用程序中尽可能少地安装过时软件。少是因为我 space 有限,但更多是因为我只是不喜欢不必要的大东西。而且我喜欢理解我实现的一切,而不是盲目地使用 JS 插件和库。
编辑:我想要的是有一个模板,它在一个对象中包含一个函数,该对象引用来自该模板每个实例中另一个变量的信息。
您可以通过保持对 myObject
的当前实例的引用来访问对象的父级属性。有关示例,请参见下面的代码段。
(function() {
'use strict';
var log;
var myObject = function myObject() {
var self = this;
this.foo = 'test';
this.bar = {
baz: function baz() {
return self.foo;
}
};
};
document.addEventListener('DOMContentLoaded', function() {
log = document.querySelector('#log');
var test = new myObject();
writeLog('test.foo before change');
writeLog('===============================');
writeLog(test.foo);
test.foo = 'foo was changed.';
writeLog('Value of test.bar.baz() after change');
writeLog('============================');
writeLog(test.bar.baz());
});
function writeLog(text) {
if (log.innerHTML) {
log.innerHTML += '<br />' + text;
} else {
log.innerHTML += text;
}
}
})();
<div id="log">
</div>
我正在 JavaScript 中开展一个项目,我需要能够访问学究对象的变量,该变量是使用子对象中的函数内的构造函数创建的。
var myObject = function(){
this.foo = 'stuff',
this.bar = {
bit: 'things',
bite: function(){
return this.this.foo;
}
}
}
var test = new myObject();
test.foo = 'blarg'
test.bar.bite() //<-- this should return 'blarg'
此时我很迷茫。我希望在这个特定的应用程序中尽可能少地安装过时软件。少是因为我 space 有限,但更多是因为我只是不喜欢不必要的大东西。而且我喜欢理解我实现的一切,而不是盲目地使用 JS 插件和库。
编辑:我想要的是有一个模板,它在一个对象中包含一个函数,该对象引用来自该模板每个实例中另一个变量的信息。
您可以通过保持对 myObject
的当前实例的引用来访问对象的父级属性。有关示例,请参见下面的代码段。
(function() {
'use strict';
var log;
var myObject = function myObject() {
var self = this;
this.foo = 'test';
this.bar = {
baz: function baz() {
return self.foo;
}
};
};
document.addEventListener('DOMContentLoaded', function() {
log = document.querySelector('#log');
var test = new myObject();
writeLog('test.foo before change');
writeLog('===============================');
writeLog(test.foo);
test.foo = 'foo was changed.';
writeLog('Value of test.bar.baz() after change');
writeLog('============================');
writeLog(test.bar.baz());
});
function writeLog(text) {
if (log.innerHTML) {
log.innerHTML += '<br />' + text;
} else {
log.innerHTML += text;
}
}
})();
<div id="log">
</div>