Object的getPrototypeOf()方法

了解JavaScript Object对象的getPrototypeOf()方法。 返回对象的原型。 使用方法: Object.getPrototypeOf(obj) 示例: const animal = {} const dog = Object.create(animal) const prot = Object.getPrototypeOf(dog) animal === prot // true 如果对象没有原型,我们会得到null。这是Object对象的情况: Object.prototype // {} Object.getPrototypeOf(Object.prototype) // null

Object的is()方法

了解一下JavaScript中Object对象的is()方法。 這個方法在ES2015中被引入,它旨在幫助比較值。 用法: Object.is(a, b) 除非以下情況,否則結果始終為false: a和b是同一個對象 a和b是相等的字符串(字符串由相同的字符以相同的順序組成時,它們是相等的) a和b是相等的數字(當它們的值相等時,數字是相等的) a和b都是undefined,都是null,都是NaN,都是true或者都是false 在JavaScript中,0和-0是不同的值,所以在這種特殊情況下要注意(在比較之前,將它們都轉換為+0,例如使用+一元運算符)。

Object的isFrozen()方法

瞭解JavaScript Object物件的isFrozen()方法的全部資訊。 接收一個物件作為參數,如果該物件被凍結則返回true,否則返回false。當物件是Object.freeze()函數的返回值時,該物件就被凍結了。 範例: const dog = {} dog.breed = 'Siberian Husky' const myDog = Object.freeze(dog) Object.isFrozen(dog) // true Object.isFrozen(myDog) // true dog === myDog // true 在這個範例中,dog和myDog都是被凍結的。傳遞給Object.freeze()的參數被改變,並且無法解凍。它也作為結果返回,因此dog === myDog(它們是同一個完全相同的物件)。

Object的isPrototypeOf()方法

了解JavaScript的Object.isPrototypeOf()方法 isPrototypeOf()是在一個物件實例上調用的,它接受一個物件作為參數。如果你調用isPrototypeOf()的物件出現在傳入的物件的原型鏈中,它將返回true,否則返回false。 範例: const Animal = { isAnimal: true } const Mammal = Object.create(Animal) Mammal.isMammal = true Animal.isPrototypeOf(Mammal) //true const dog = Object.create(Animal) Object.setPrototypeOf(dog, Mammal) Animal.isPrototypeOf(dog) //true Mammal.isPrototypeOf(dog) //true

Object的isSealed()方法

了解JavaScript Object对象的isSealed()方法。 接受一个对象作为参数,并在对象被封闭时返回true,否则返回false。当对象是Object.seal()函数的返回值时,对象会被封闭。 示例: const dog = {} dog.breed = 'Siberian Husky' const myDog = Object.seal(dog) Object.isSealed(dog) //true Object.isSealed(myDog) //true dog === myDog //true 在示例中,dog和myDog都是被封闭的。Object.seal()函数的参数会被修改,并且不能被解封。它也会作为返回值,因此dog === myDog(它们是完全相同的对象)。

Parcel,如何修復“regeneratorRuntime未定義”錯誤

我在一個使用Babel的項目中遇到了這個問題,只要我添加了一個async函數,這個問題就會出現,但對於任何最近的JavaScript功能,問題都是一樣的: 由Parcel使用的Babel生成了一個polyfill,但為了避免這個錯誤,你還需要加載regenerator-runtime運行時。 一種解決方案是在你的主JavaScript文件的頂部添加以下內容: import 'regenerator-runtime/runtime' Parcel在默認情況下會包含這個包,增加了25KB的大小。 在代碼庫方面,最有效的解決方法是在你的package.json中添加browserslist屬性。 例如: "browserslist": [ "last 1 Chrome version" ] 對於測試來說足夠好了。支持多個瀏覽器: "browserslist": [ "last 3 and_chr versions", "last 3 chrome versions", "last 3 opera versions", "last 3 ios_saf versions", "last 3 safari versions" ] 或者: "browserslist": [ "since 2017-06" ] 你需要添加一個足夠新的版本來支持async/await,這樣Babel就不會嘗試添加一個polyfill。 在這裡檢查所有有效的值:https://github.com/browserslist/browserslist

parseFloat() 方法

瞭解 JavaScript Number 物件的 parseFloat() 方法 將參數解析為浮點數並返回。參數是一個字串: Number.parseFloat('10') // 10 Number.parseFloat('10.00') // 10 Number.parseFloat('237,21') // 237 Number.parseFloat('237.21') // 237.21 Number.parseFloat('12 34 56') // 12 Number.parseFloat(' 36 ') // 36 Number.parseFloat('36 is my age') // 36 Number.parseFloat('-10') // -10 Number.parseFloat('-10.2') // -10.2 如你所見,Number.parseFloat() 非常靈活。它還可以將帶有文字的字串轉換為數字,並提取第一個數字,但字串必須以數字開頭: Number.parseFloat('I am Flavio and I am 36') // NaN 它僅處理基數為 10 的數字。

parseInt()方法

详细了解JavaScript Number对象的parseInt()方法。 将参数解析为整数并返回: Number.parseInt('10') //10 Number.parseInt('10.00') //10 Number.parseInt('237,21') //237 Number.parseInt('237.21') //237 Number.parseInt('12 34 56') //12 Number.parseInt(' 36 ') //36 Number.parseInt('36 is my age') //36 如您所见,Number.parseInt()非常灵活。它还可以转换带有文字的字符串,并提取第一个数字,但字符串必须以数字开头: Number.parseInt('I am Flavio and I am 36') //NaN 您可以添加第二个参数来指定基数。默认是10进制,但也可以使用八进制或十六进制转换: Number.parseInt('10', 10) //10 Number.parseInt('010') //10 Number.parseInt('010', 8) //8 Number.parseInt('10', 8) //8 Number.parseInt('10', 16) //16

Phaser: 多個場景

本文章為 Phaser 系列文章的一部分。點此查看該系列文章的第一篇。 在先前的例子中,我們看到了如何通過將包含函數引用的物件傳遞給 Phaser.Game() 選項物件的 scene 屬性來創建場景: function preload() {} function create() {} new Phaser.Game({ width: 450, height: 600, scene: { preload, create } }) 這是一個簡單的情境。 一個遊戲通常有多個場景。您可以在不同的檔案中創建每個場景,並將它們作為陣列傳遞給 scene 屬性。 在這種情況下,場景是通過擴展 Phaser.Scene 物件來創建的。 我們在一個獨立的 Welcome.js 檔案中創建了一個歡迎場景: export default class Scene1 extends Phaser.Scene { constructor() { super('welcome') } create() { this.add.text(20, 20, 'Loading..') setTimeout(() => { this.scene.start('game') }, 2000) } } 並在 Game.js 中創建了一個遊戲場景: export default class Scene2 extends Phaser.Scene { constructor() { super('game') } create() { this....

Phaser: 遊戲迴圈

本文章是 Phaser 系列文章的一部分。點擊這裡查看系列文章的第一篇。 在 Phaser 中,除了 preload() 和 create() 這兩個場景外,我們還有第三個場景,被稱為 update()。 在這裡,一切事情都會發生。 preload() 和 create() 只會執行一次。 update() 會一直被呼叫,成為一個無窮迴圈,直到遊戲結束。 在這個例子中,我們創建了一個文字,它慢慢地移動到畫布的右下角: let text function create() { text = this.add.text(100, 100, 'test') } function update() { text.x += 1 text.y += 1 } const game = new Phaser.Game({ width: 400, height: 400, scene: { create, update } }) 注意我在頂部添加了 let text,這樣我們可以在 create() 和 update() 中引用它。 在 update() 中,我修改了 x 和 y 屬性。您還可以修改其他屬性,例如可以修改 angle 以旋轉物體:...