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