创建了一个对象 Blubb ,它必须做一些事情。有几个对象。现在还有另一个对象 BlubbWatcher ,当它必须从 Blubb 重置一些东西时。
我尝试创建asia
japan
korea
arab
europa
england
spain
italy
america
brazil
argentina
mexico
,然后我想我可以稍后使用prototype.functions
来使用它们。现在我可以使用这些功能,但属性是空的/未定义的,因为我猜我在 BlubbWatcher
演示我的问题的简化示例:
Object.create(Blubb)
var Blubb = function(element) {
this.element = element;
this.header = 'hello world';
this.init();
};
Blubb.prototype.init = function() {
console.log(this.header);
};
////////////////
var BlubbWatcher = function(sections){
this.sections = sections;
this.Blubb = Object.create(Blubb);
Array.prototype.forEach.call(
this.sections,
(function (element) {
// call Blubb.init from here makes header undefined
console.log(' - next log is undefined - ')
this.Blubb.prototype.init(element);
}).bind(this)
);
};
//////////////////
var sections = document.querySelectorAll('section');
Array.prototype.forEach.call(
sections,
function (element, index) {
new Blubb(element);
}
);
new BlubbWatcher(sections);
如何在 BlubbWatcher 中使用 Blubb 的功能和属性?
答案 0 :(得分:1)
var Blubb = function(element, header) {
this.element = element;
this.header = header;
this.init();
};
Blubb.prototype.init = function() {
console.log(this.header, 'header');
};
////////////////
var BlubbWatcher = function(blubbs){
this.blubbs = blubbs;
Array.prototype.forEach.call(
this.blubbs,
function (element) {
console.log(' - next log is NOT undefined :) - ')
element.init();
}
);
};
//////////////////
var sections = document.querySelectorAll('section');
var blubbs = Array.prototype.map.call(
sections,
function (element) {
return new Blubb(
element,
document.querySelector('header')
);
}
);
new BlubbWatcher(blubbs);
我重写了你的代码。实际情况是,您实际上是在BlubbWatcher中创建Blubb的新实例,而不是使用之前创建的实例。
为了使它工作,我在部分上使用.map
并得到一个包含Blubb实例的数组,然后我将这些实例添加到BlubbWatcher。
如果您使用的是浏览器并且必须支持旧浏览器,请考虑将lodash
库与_.map
一起使用。