Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在另一个对象中使用一个对象的函数和属性_Javascript_Prototype - Fatal编程技术网

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

Javascript 在另一个对象中使用一个对象的函数和属性,javascript,prototype,Javascript,Prototype,创建了一个必须执行某些操作的对象。有几个这样的对象。现在有另一个对象BlubWatcher,当它必须时,它必须从Blubb重置一些东西 我曾尝试创建prototype.functions,并认为以后可以使用Object.create(Blubb)。现在我可以使用函数,但是属性是空的/未定义的,因为我想我在BlubWatcher中没有正确的Blubb实例 演示我的问题的简化示例: var Blubb=函数(元素){ this.element=元素; this.header='hello worl

创建了一个必须执行某些操作的对象。有几个这样的对象。现在有另一个对象BlubWatcher,当它必须时,它必须从Blubb重置一些东西

我曾尝试创建
prototype.functions
,并认为以后可以使用
Object.create(Blubb)
。现在我可以使用函数,但是属性是空的/未定义的,因为我想我在BlubWatcher中没有正确的Blubb实例

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

var Blubb=函数(元素){
this.element=元素;
this.header='hello world';
this.init();
};
Blubb.prototype.init=函数(){
console.log(this.header);
};
//////////////// 
var BlubWatcher=功能(部分){
本节=节;
this.Blubb=Object.create(Blubb);
Array.prototype.forEach.call(
本节,
(功能(要素){
//从这里调用Blubb.init使标题未定义
console.log(“-下一个日志未定义-”)
this.Blubb.prototype.init(元素);
}).绑定(此)
);
};
//////////////////
var sections=document.querySelectorAll('section');
Array.prototype.forEach.call(
部分,
函数(元素、索引){
新百宝(元素);
}
);
新Blubwatcher(章节)
部分
我已经重写了你的代码。实际上,您正在BlubWatcher中创建新的Blubb实例,而不是使用以前创建的实例

为了让它工作,我在小节中使用了
.map
,得到了一个包含Blubb实例的数组,然后我将这些实例添加到BlubWatcher中


如果您在浏览器中,必须支持旧浏览器,请考虑使用<代码> LoaSuth<代码>库> <代码> > map > <代码> > < /p>您是否希望<代码> BlubbWatcher <代码>包含一个或多个代码> BLUBB对象?或者您想要某种类似于继承的关系吗?@FrankModica我想要一种类似于继承的关系

对象。除非您通过第二个参数显式指定/传递属性,否则create
不会创建属性(有关详细信息,请参阅)。但是,如果您已经有一个构造函数(基类),您可以在子类的构造函数中调用它。然后将属性从基类自动复制/继承到子类。或者,您也可以使用
new
操作符将基类实例化为子类的成员:
this.Blubb=new Blubb()
@hindmost你介意设置一个演示小提琴吗?我试过你的代码,但是浏览器控制台说:“uncaughttypeerror:sections.map不是一个函数”我已经更新了我的代码和JSFIDLE,它对我有效:)
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);