继承对象
Inheriting objects
我读到Javascript的继承是原型的。这是什么意思?程序员定义的对象如何继承预定义对象(如window)的属性?例如,我需要在自己的类中使用eval()函数。怎样才能实现呢?
先不考虑是否应该继承window
,这里有一个简单的示例,演示如何继承:
function Test() {
// constructor code
}
Test.prototype = window;
var t = new Test();
t.eval();
当使用new
操作符调用时,Test
函数创建一个新的Test
实例,其原型链接到window
对象。函数的原型可以是任何对象
提示:不要使用new
来声明对象。对象。create是创建JavaScript对象的正确方法。所有现代浏览器都支持它。对于其他浏览器,本文底部有一个不错的提示:
使用'new'的构造函数的一个问题是,如果人们不小心像普通函数一样调用它,它会使用变量this
对全局变量(即在浏览器中使用窗口)进行修改,因此this
应该只保留给原型函数,我更喜欢使用that
而不是this
我个人使用支持new obj()
, obj()
和obj.init()
的样式,这可能是一个额外的函数指针,但我认为它增加了语义意义
function obj(){
var that = Object.create(obj.prototype)
//any constructor logic goes here
return that
}
obj.prototype = Object.create(Superclass.prototype)
obj.init = obj //completely optional
//other function declarations
obj.prototype.someFunction = function(){
//logic for someFunction
}
你到底想达到什么目的?下面是原型继承最简单的方法(不是最好的):
var obj1=new Object1Constructor();
var obj2=new Object2Constructor();
obj2.prototype=obj1;
表示obj1
继承obj2
的所有属性
我忘了最重要的:eval==evil;
更新:我在上面的代码中犯了错误。这不是继承。下面是更新后的代码:
var Object1Constructor=function(){ // one object constuctor
//properties definition goes here
}
var Object2Constructor=function(){ // another object constuctor
//properties definition goes here
}
Object2Constructor.prototype=new Object1Constructor();
var obj=new Object2Constructor();
这就是继承。现在obj
在Object2Constructor
和Object1Constructor
的父"类"中定义了属性。请看下面CMS的评论。他完全正确。
相关文章:
- JavaScript对象继承问题
- 我的Javascript对象继承自什么
- javascript对象继承-子类和超类
- 向扩展数组的JS集合添加对象(继承?)
- 使 HTML 元素从自定义对象继承事件
- 如何从“构造函数返回另一个对象”对象继承
- 在 Ember.js 中,如何使用 super() 遍历对象继承树
- 如何实现 JavaScript 对象继承
- Javascript 对象继承
- 使用jquery的函数对象继承's延伸
- 是否可以从javascript函数对象继承
- 从数组中的对象继承/调用函数
- 如何强制javascript数组从我的自定义对象继承
- 为什么不't我的对象继承了keys函数
- JavaScript中的对象继承
- 通过clone()实现对象继承是如何工作的
- 原型继承为什么子对象不从父对象继承方法
- 从Error对象继承-其中是消息属性
- JavaScript对象继承问题
- 对象继承