2015-11-07 85 views
1

在閱讀Eric Elliot的這篇文章https://medium.com/javascript-scene/the-single-biggest-mistake-programmers-make-every-day-62366b432308時,我遇到了以下類型的對象方法定義。在Javascript中定義對象方法的兩種方法有什麼區別?

var obj = { 
 
    getX() { 
 
    document.write('X'); 
 
    } 
 
} 
 

 
obj.getX(); // X

?它與下面的類型定義的不同?

var obj = { 
 
    getX: function getX() { 
 
    document.write('X'); 
 
    } 
 
} 
 

 
obj.getX(); // X

+1

第一個是無效的JS? –

+0

@NiettheDarkAbsol爲什麼?它在我的瀏覽器中編譯並運行良好。 – abhisekp

+0

我試着運行它。我得到了「預計」:'「,因爲我認爲我會...不管它是什麼,它都不是JavaScript。 –

回答

5

的第一表示是ES2015/ES6速記符號,並不會在Safari或Internet Explorer工作

文檔:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Method_definitions

的第一個問題是速記符號第二,這意味着沒有區別就功能而言 - 但是,直到Internet Explorer是dea d和埋葬和Safari瀏覽器追趕(或跟隨互聯網瀏覽器到同一墳墓)第一個表示法不建議面向公衆的網站,因爲沒有「墊片」或「polyfill」語法變化的可能性

最重要的是,大多數「原生移動」瀏覽器不支持這個(不是說android/chrome/firefox等)

+0

注意:[Safari 9和Edge都支持這種語法。](https://kangax.github.io/compat-table/es6/#test-object_literal_extensions) –

+0

是的,我從來沒有說過邊緣不會(safari 9我對此不太瞭解 - 僅僅通過MDN頁面) –

+0

大多數人正在使用Babel之類的東西將ES6語法更改編譯爲ES5。 –

相關問題