JavaScript继承

Tow*_*wer 13 javascript oop

Douglas Crockford似乎喜欢以下继承方法:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}
newObject = Object.create(oldObject);
Run Code Online (Sandbox Code Playgroud)

它看起来不错,但它与John Resig的简单继承方法有何不同?

基本上它归结为

newObject = Object.create(oldObject);
Run Code Online (Sandbox Code Playgroud)

newObject = Object.extend();
Run Code Online (Sandbox Code Playgroud)

我对理论很感兴趣.实施方面似乎没有太大的区别.

CMS*_*CMS 7

方法完全不同,Resig技术创建构造函数,这种方法也称为经典继承,即:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  }
});

var p = new Person(true);
Run Code Online (Sandbox Code Playgroud)

如您所见,该Person对象实际上是一个构造函数,与new操作符一起使用.

使用该Object.create技术,继承基于实例,其中对象直接从其他对象继承,也称为Prototypal InheritanceDifferential Inheritance.

  • @Tower:伪经典方法,如Resig的*简单继承*,[base2](http://code.google.com/p/base2/)库或[PrototypeJS]的方法(http:// www.prototypejs.org/learn/class-inheritance)人们习惯使用*经典*语言很容易喘息,所以它可能取决于你的团队技能,IMO,我真的很喜欢原型继承的简单性,但是当然,你需要开始思考*原型*.另一种选择可以是使用plain [constructors](http://mckoss.com/jscript/object.htm),但一定要学习[它们如何工作](http://bit.ly/cidKWg). (2认同)

SLa*_*aks 6

它们完全不同.

道格拉斯Crockford的方法创建一个实例继承不同的实例.

约翰Resig的方法创建一个继承不同的类.

使用Douglas Crockford的方法时,您将创建一个继承单个现有实例的新对象实例.

使用John Resig的方法时,您将创建一个构造函数,然后可以使用该函数创建继承类的实例.