继承对象

Inheriting objects

本文关键字:对象 继承      更新时间:2023-09-26

我读到Javascript的继承是原型的。这是什么意思?程序员定义的对象如何继承预定义对象(如window)的属性?例如,我需要在自己的类中使用eval()函数。怎样才能实现呢?

先不考虑是否应该继承window,这里有一个简单的示例,演示如何继承:

function Test() {
    // constructor code
}
Test.prototype = window;
var t = new Test();
t.eval();

当使用new操作符调用时,Test函数创建一个新的Test实例,其原型链接到window对象。函数的原型可以是任何对象

提示:不要使用new来声明对象。对象。create是创建JavaScript对象的正确方法。所有现代浏览器都支持它。对于其他浏览器,本文底部有一个不错的提示:

http://javascript.crockford.com/prototypal.html

使用'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();

这就是继承。现在objObject2ConstructorObject1Constructor的父"类"中定义了属性。请看下面CMS的评论。他完全正确。