使用另一个对象中一个对象的函数和属性

时间:2017-09-20 09:10:29

标签: javascript prototype

创建了一个对象 Blubb ,它必须做一些事情。有几个对象。现在还有另一个对象 BlubbWatcher ,当它必须从 Blubb 重置一些东西时。

我尝试创建asia japan korea arab europa england spain italy america brazil argentina mexico ,然后我想我可以稍后使用prototype.functions来使用它们。现在我可以使用这些功能,但属性是空的/未定义的,因为我猜我在 BlubbWatcher

中没有正确的 Blubb 实例

演示我的问题的简化示例:

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 的功能和属性?

1 个答案:

答案 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一起使用。