将函数绑定到 JavaScript 继承层次结构中的原型
Binding a function to a prototype in a JavaScript inheritance hierarchy
我想做的是将序列化方法改造为现有的JavaScript类型,它是继承树的成员。它几乎可以正常工作,但我的函数正在父类型上运行,而不是我试图与之关联的类型。所以举一个非常基本的例子:
function Animal( species, population )
{
this.species = species;
this.population = population;
}
Animal.prototype.getDetail = function()
{
return "Species: "+this.species+" Population: "+this.population;
}
function Mammal( species, population, bodyTemperature )
{
Animal.apply(this, [species, population]);
this.bodyTemperature = bodyTemperature;
}
Mammal.prototype= new Animal();
Mammal.constructor = Mammal;
var Serialise= {
init: function() {
Mammal.prototype.serialise = this.serialiseMammal.bind(Mammal.prototype);
},
serialiseMammal: function() {
return {
species: this.species,
population: this.population,
bodyTemperature: this.bodyTemperature
};
}
}
Serialise.init();
var bob = new Mammal("Human", 7000000000, 36.6);
console.log( bob.serialise() );
正在发生的事情是serialise
函数在Animal
类型的上下文中运行,这是正确的,因为这是Mammal
的原型,但是如果我尝试将其直接绑定到Mammal
,则什么也没发生。再一次,我发现自己超出了JavaScript的范围。
这样做的原因是将我所有的序列化/反序列化保存在一个地方,以便我需要它时它就在那里,但我并不总是必须包含它 - 我想在另一种语言中它可能表现得有点像混合。
我需要做什么来确保Mammal
类型的实例上的任何serialise()
调用将在当前实例的上下文中正确应用 Serialise.serialiseMammal()
函数?有没有办法在创建函数时不将函数绑定到单个实例的情况下执行此操作?
我也在努力提高自己对语言的专业知识,并以更多的JavaScript方式做事,所以如果整个方法完全古怪或违背语言的颗粒,那就太好了。
我不完全明白你为什么要这样装饰它,而不是把专门的serialiseMammal
直接放在Mammal.prototype
上,如下所示:
Mammal.prototype.s2 = function() {
return {
species: this.species,
population: this.population,
bodyTemperature: this.bodyTemperature
};
};
我称之为s2
以免冲突。这是来自serialiseMammal
的相同代码。但是,如果您更喜欢您使用的装饰器样式模式,那么您只需要执行以下操作:
var Serialise= {
init: function() {
Mammal.prototype.serialise = this.serialiseMammal;
},
serialiseMammal: function() {
return {
species: this.species,
population: this.population,
bodyTemperature: this.bodyTemperature
};
}
}
在init
的上下文中,this
指的是Serialise
,所以this.serialiseMammal
是你所拥有的函数。但它只是一个功能,仅此而已。下次调用 bob.serialise()
时,将在当下的上下文中调用该函数。这,this
bob.serialise()
内部,这是来自serialiseMammal
的代码,设置为bob
。
这是对它的摆弄。http://jsfiddle.net/6un6qho1/1/
- 从json对象聚集数据并创建层次结构
- Html5-使用SVG路径绘制的组织层次结构在左手边被剪裁
- 使用jquery为移动布局更改html层次结构
- 如何在javascript中使用2个一维数组创建层次结构树
- 从d3.js中的csv创建树层次结构
- D3:使用 nest 函数将带有父键的平面数据转换为层次结构
- JSON 层次结构,如何获取元素
- 展平多个嵌套层次结构数组-d3.js
- Kendo UI层次结构DataSource架构不工作
- 用于构建树节点层次结构的javascript库
- 如何在JavaScript中显示注释线程层次结构
- js初学者-如何获得网页中所选内容的html以及整个节点层次结构
- Jquery选择层次结构
- 无法通过jQuery查找来定位层次结构中的对象
- Html5画布,继承层次结构可能导致闪烁
- d3.js-通过csv显示饼图中的层次结构
- 如果其他语句层次结构 JS
- 跨度外部背景控制的层次结构
- 将函数绑定到 JavaScript 继承层次结构中的原型
- Javascript:什么是多级原型层次结构,为什么我们应该避免它