var DragOp = function() {};
DragOp.prototype = {
start: function(){},
drag: function(){},
end: function(){},
isSameItem: function() {
return false;
}
};
var SlideDrag = function(opts) {
this.dragThresholdX = opts.dragThresholdX || 10;
this.el = opts.el;
this.item = opts.item;
this.canSwipe = opts.canSwipe;
};
SlideDrag.prototype = new DragOp();
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
var DragOp = function() {};以函数表达式的形式创建DragOp函数
DragOp.prototype ={……} 编写DragO函数的原型对象
new DragOp();创建一个DragOp函数的实例
SlideDrag.prototype = new DragOp();将DragOp函数的实例赋值给SlideDrag函数的原型对象,从而使得SlideDrag函数继承DragOp函数的全部属性及方法
这是典型的原型链继承,建议先了解一下 JS 原型及原型链的基本知识
私货夹带:
http://zjy.name/archives/javascript-object-oriented-1.html
http://zjy.name/archives/javascript-object-oriented-2.html
引用:
在 JavaScript 内部,对象的属性和方法追溯机制是通过所谓的 prototype 链来实现的。当用 new 操作符构造对象时,也会同时将
构造函数的 prototype 对象指派给新创建的对象,成为该对象内置的原型对象。对象内置的原型对象应该是对外不可见的,尽管有些浏
览器(如 Firefox)可以让我们访问这个内置原型对象,但并不建议这样做。内置的原型对象本身也是对象,也有自己关联的原型对象,
这样就形成了所谓的原型链。
这是一个对象原型链继承的DEMO.
每个函数在创建是,都会自动生成一个原型对象. 即prototype.
如果这个函数是个构造函数, 那么再用构造函数创建的实例的[[prototype]]特性(chrome Safari里的_proto_属性 )也会指向构造函数的prototype.
让SlideDrag构造函数的prototype指向了一个DragOp的实例, 那么以SlideDrag创建的实例的[[prototype]]特性也会指向DragOp的实例,而这个实例的[[prototype]]特性又会指向DragOp的prototype, 在调用一个对象的属性或方法时,会先查找这个对象自身有没有该属性(方法), 若有,则调用,若没有,则一直远着[[prototype]]特性层层往上查询,直至查询到Object对象都还不存在,则返回undefined. 由此达到层层递进,一直到Object的实例对象, 最终达到继承的效果.
详情请见<JavaScript高级程序设计>第六章,对象的继承.