JavaScript不会抛出错误

时间:2016-08-15 15:23:30

标签: javascript google-closure-library

我对JS行为很困惑,实际上在CoffeScript,Este-library,Google-closure和React中开发大型应用程序。如果不知道的话,我可以分享更多的信息或代码。

这种“非投掷”行为开始,当组件(goog.ui.Component)不能通过装饰时,在React中调用not exists func或者如果我简单地删除Google Analytic init代码 - >变量窗口['ga']不存在但是窗口['ga']。someFunc()不会抛出任何错误。这不是1:1代码。

Component = function() { }
Component.prototype.match_ = null;
Component.prototype.show = function() {
    'use strict';
    console.log(this.match_);
    this.match_.functionDoesntExist();
}

这样的流程代码:

var component = new Component();
component.show();

输出如下:

null

如果我替换“Component.prototype.show”:

// ...
Component.prototype.show = function() {
    'use strict';
    try {
        console.log(this.match_);
        this.match_.functionDoesntExist();
    } catch (error) {
        console.log("Error detected!", error);
    }
}

它会触发错误并正确显示:

"Error detected! TypeError: Cannot read property 'functionDoesntExist' of null(…)"

以下是Google Analytic示例,代码为1:1。

goog.provide('core.Analytics');
goog.require('goog.Uri');

/**
  @constructor
 */
core.Analytics = function() {
  this.ga_ = window['ga'];
  return;
}
goog.addSingletonGetter(core.Analytics);

/**
  @private
 */
core.Analytics.prototype.ga_ = null;

/**
  @public
 */
core.Analytics.prototype.sendPageView = function() {
  var page;
  page = this.getCurrentPage_();
  this.ga_('send', {
    'page': page
  });
};

/**
  @private
  @return {string}
 */
core.Analytics.prototype.getCurrentPage_ = function() {
  var page, uri;
  uri = new goog.Uri(window['location']['href']);
  page = uri.getPath();
  if (uri.hasQuery()) {
    page += '?' + uri.getQuery();
  }
  if (uri.hasFragment()) {
    page += '#' + uri.getFragment();
  }
  return page;
};

以及其他一些文件:

goog.require('core.Analytics');

core.Analytics.getInstance().sendPageView();

PS:抱歉不好(:

0 个答案:

没有答案