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)
我对理论很感兴趣.实施方面似乎没有太大的区别.
方法完全不同,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 Inheritance或Differential Inheritance.
它们完全不同.
道格拉斯Crockford的方法创建一个实例继承不同的实例.
约翰Resig的方法创建一个类继承不同的类.
使用Douglas Crockford的方法时,您将创建一个继承单个现有实例的新对象实例.
使用John Resig的方法时,您将创建一个构造函数,然后可以使用该函数创建继承类的实例.
| 归档时间: |
|
| 查看次数: |
1193 次 |
| 最近记录: |