Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正在对象内使用依赖项';什么样的原型方法不好?_Javascript - Fatal编程技术网

Javascript 正在对象内使用依赖项';什么样的原型方法不好?

Javascript 正在对象内使用依赖项';什么样的原型方法不好?,javascript,Javascript,我正在尝试创建一个简单的应用程序,从数据库中检索youtube歌曲数据,并将其显示在列表中 下面是轨迹对象的基本外观: function Track(title, artist, genre, length, videoId) { this.title = title; this.artist = artist; this.genre = genre; this.length = length; this.videoId = videoId; } 注意:videoId只是播

我正在尝试创建一个简单的应用程序,从数据库中检索youtube歌曲数据,并将其显示在列表中

下面是轨迹对象的基本外观:

function Track(title, artist, genre, length, videoId) {
  this.title = title;
  this.artist = artist;
  this.genre = genre;
  this.length = length;
  this.videoId = videoId;
}
注意:videoId只是播放器使用的唯一字符串

现在,我创建了一个带有公共API的模块,它可以处理所有youtube播放器功能。如下所示:

var player = (function() {

  function playVideo(videoId) {
    youtubePlayer.playVid(videoId);
  }

  // ... other player functionality ...

  return {
    playVideo: function(videoId) {
       return playVideo(videoId);
    }
  }

})();
Track.prototype.playVideo = function(player) {
  player.playVideo(this.videoId);
}
(我只是在编上面youtube的API,我忘了播放视频的实际代码是什么,但它是类似的)

现在,我想在轨迹对象中添加一个函数来播放该轨迹。当用户单击该曲目的播放按钮时,我将调用此方法。如下所示:

var player = (function() {

  function playVideo(videoId) {
    youtubePlayer.playVid(videoId);
  }

  // ... other player functionality ...

  return {
    playVideo: function(videoId) {
       return playVideo(videoId);
    }
  }

})();
Track.prototype.playVideo = function(player) {
  player.playVideo(this.videoId);
}
基本上,我将我创建的“播放器”模块传递到原型方法中,然后使用它使用API播放特定曲目的视频

这样做可以吗,还是被认为是不好的做法?本质上,它是在原型属性中创建对外部模块的依赖关系

如果这是不好的做法,那么解决这个问题的更好方法是什么


感谢您对这一点的深入了解:)

正如代码所示,没有外部依赖关系,您可以通过参数将所有需要的都带到函数中。是的,您是对的:)我想我应该说一些关于使用外部代码的内容?不管怎么说,这是一个坏习惯吗?一点也不坏,DI是一个好模式。我应该提到的是,如果您将“videoId”作为player的一个属性,那么您可以在曲目中使用player的方法,这样您就可以将最后的代码编写为track.prototype.playVideo=player.playVideo;而不是使用额外的包装器。我喜欢回收,非常好!看起来确实干净多了,谢谢@dandavis!:)如果我是你,我不会把函数
播放视频
放在Track.prototype中。因为对象轨迹本身无法播放。在您的设计中,您可能还需要添加更多跟踪,如
销售
购买
,等等。这些都是业务逻辑。我会像这样播放:
player.playVideo(track)