javascript - 这段话怎么理解,又是new又是prototype,搞懵 了,为啥这么写呢?
伊谢尔伦
伊谢尔伦 2017-04-11 11:33:21
[JavaScript讨论组]
 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();
伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(4)
黄舟

var DragOp = function() {};以函数表达式的形式创建DragOp函数
DragOp.prototype ={……} 编写DragO函数的原型对象
new DragOp();创建一个DragOp函数的实例
SlideDrag.prototype = new DragOp();将DragOp函数的实例赋值给SlideDrag函数的原型对象,从而使得SlideDrag函数继承DragOp函数的全部属性及方法

ringa_lee

这是典型的原型链继承,建议先了解一下 JS 原型及原型链的基本知识

私货夹带:
http://zjy.name/archives/javascript-object-oriented-1.html
http://zjy.name/archives/javascript-object-oriented-2.html

PHP中文网

引用:
在 JavaScript 内部,对象的属性和方法追溯机制是通过所谓的 prototype 链来实现的。当用 new 操作符构造对象时,也会同时将
构造函数的 prototype 对象指派给新创建的对象,成为该对象内置的原型对象。对象内置的原型对象应该是对外不可见的,尽管有些浏
览器(如 Firefox)可以让我们访问这个内置原型对象,但并不建议这样做。内置的原型对象本身也是对象,也有自己关联的原型对象,
这样就形成了所谓的原型链。

PHP中文网

这是一个对象原型链继承的DEMO.
每个函数在创建是,都会自动生成一个原型对象. 即prototype.
如果这个函数是个构造函数, 那么再用构造函数创建的实例的[[prototype]]特性(chrome Safari里的_proto_属性 )也会指向构造函数的prototype.
让SlideDrag构造函数的prototype指向了一个DragOp的实例, 那么以SlideDrag创建的实例的[[prototype]]特性也会指向DragOp的实例,而这个实例的[[prototype]]特性又会指向DragOp的prototype, 在调用一个对象的属性或方法时,会先查找这个对象自身有没有该属性(方法), 若有,则调用,若没有,则一直远着[[prototype]]特性层层往上查询,直至查询到Object对象都还不存在,则返回undefined. 由此达到层层递进,一直到Object的实例对象, 最终达到继承的效果.
详情请见<JavaScript高级程序设计>第六章,对象的继承.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号