在 JavaScript 中创建干净的、可继承的对象
Creating clean, inheritable objects in JavaScript
我正在使用一个相当大的JavaScript项目,并试图重构它以说服它以更像JavaScript的方式运行。我真正想引入的一件事是使继承可用,因为这非常适合我正在做的大部分工作,但是以一种易于阅读和遵循的方式使用原型和继承似乎有点困难,而不会溶解到 JavaScript jam 中。
我有这样的事情:
MyMammal = function( name ) {
if ( 0 < arguments.length )
{
this.init(name);
}
}
MyMammal.prototype= {
init: function( name ) {
this.name= name;
},
getName: function() {
return this.name;
}
}
然后对于派生自MyMammal
的类,我的工作方式是这样的:
MyDog = function( name, breed ) {
if ( 0 < arguments.length )
{
this.init( name, breed );
}
}
MyDog.prototype = Object.create( MyMammal.prototype );
_.extend( MyDog.prototype, {
init: function( name, breed )
{
this.name = name;
this.breed = breed;
},
getBreed: function()
{
return this.breed;
}
});
现在,只要我从方法调用中获得我期望的结果,这就可以工作,但是如果我尝试使用isPrototypeOf
,JavaScript 似乎不知道MyMammal
是MyDog
的原型,尽管它确实认识到MyDog
的实例是一个instanceof MyMammal
。
据我了解,除了能够轻松创建子类的传统优势外,JavaScript 原型还共享函数,因此很好地使用它们应该更节省内存。我的问题是首先这个模型是否能够利用这一点(我不明白为什么它不会,但这就是我问的原因(,其次,将这种类型的结构用于大型 JS 应用程序的代码是否有任何重大缺点? 我正在尝试以惯用的JavaScript方式工作,并且不太担心对局部变量保密。
例如
:
MyMammal = function( name ) {
if ( 0 < arguments.length )
{
this.init(name);
}
}
MyMammal.prototype= {
init: function( name ) {
this.name= name;
},
getName: retrieveNameOfMammal}; //here is where the fun happens
function retrieveNameOfMammal()
{
return this.name;
}
MyDog = function( name, breed ) {
MyMammal.apply(this, name); //this will apply all properties and functions from MyMammal, so you do not have to recreate this.init every time.
}
相关文章:
- 将代码转换为可重用对象
- 如何在我传递给视图的ViewModel集合中获得jQuery可选对象的值,以作为有序列表进行迭代
- 继承对象并将变量传递给它,javascript
- 最新typescript编译器版本(0.9.5)中的可索引对象
- 在ko.applyBindings(..)中执行Knockout js订阅函数(用于可观察对象)
- 模仿`overflow-y:auto;overflow-x:visible `在jQuery UI可排序对象上
- Knockout.js用单个json对象绑定一个可观察对象
- 继承对象.遍历所有对象
- 如何使用下划线创建自己的可继承类
- Web Workers-JSON的可传输对象
- 根据某些条件将 JS 绑定到可观察对象内的数组元素
- Jquery UI:如何指示可拖动对象成功拖放到可排序对象上
- Jquery 如何指定哪个可丢弃对象应与嵌套的可放置元素一起使用
- 使用可编辑对象进行分组
- 我怎样才能延迟可折叠对象的扩展,直到获取其内容
- 如何从挖空可观察对象中获取所选项目的文本
- 我正在尝试从可绘制对象中获取位图
- 从另一个可观察对象获取价值的最佳方法,而无需组合最新
- 在 JavaScript 中创建干净的、可继承的对象
- 具有继承属性的函数(可调用)对象