當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
javascript 自定义类型
生活随笔
收集整理的這篇文章主要介紹了
javascript 自定义类型
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言
- 360極速瀏覽器: 12.0.1476.0 (正式版本) (32 位)
- 修訂版本: 47c49e5a5935cfffa348dcfa6c581f4394327ac8
- 操作系統: Windows 10 OS Version 2004 (Build 19041.450)
- JavaScript :V8 7.8.279.23
注:使用命令 chrome://version/ 查看 JavaScript 版本 - javascript 查看變量類型
- 該怎么判斷自定義的類型呢?
Object.prototype.toString 查看自定義類型的問題
class MyBook {} console.log(Object.prototype.toString.call(new MyBook())); // "[object Object]"function MyVideo() {} console.log(Object.prototype.toString.call(new MyVideo())); // "[object Object]"console.log(Object.prototype.toString.call({})); // "[object Object]"通過上面的代碼可以看出無法區分出 MyBook 和 MyVideo 。
期望能夠獲得 [object MyBook] 和 [object MyVideo] 。
Object.prototype.toString 方法的原理
簡單理解 Object.prototype.toString 的返回值為:"[object " + @@toStringTag + “]” 。
@@toStringTag 是啥?我沒明白是個啥,這里不介紹了。
正確設置自定義類型
class MyBook { get[Symbol.toStringTag](){return "MyBook";} } console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"function MyVideo() {} MyVideo.prototype[Symbol.toStringTag]="MyVideo"; console.log(Object.prototype.toString.call(new MyVideo())); // "[object MyVideo]"let myHome = { [Symbol.toStringTag]:"MyHome" }; console.log(Object.prototype.toString.call(myHome)); // "[object MyHome]"還可以這樣:
class MyBook { [Symbol.toStringTag]="MyBook"; } console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"class MyBook {} MyBook.prototype[Symbol.toStringTag]="MyBook"; console.log(Object.prototype.toString.call(new MyBook())); // "[object MyBook]"function MyVideo() { this[Symbol.toStringTag]="MyVideo"; } console.log(Object.prototype.toString.call(new MyVideo())); // "[object MyVideo]"一個值得思考的問題
不要這樣做:
class MyBook {} let myBook=new MyBook(); myBook[Symbol.toStringTag]="MyBook"; console.log(Object.prototype.toString.call(myBook)); // "[object MyBook]"class MyVideo {} let myVideo=new MyVideo(); myVideo[Symbol.toStringTag]="MyVideo"; console.log(Object.prototype.toString.call(myVideo)); // "[object MyVideo]"let myHome = {}; myHome[Symbol.toStringTag]="MyHome"; console.log(Object.prototype.toString.call(myHome)); // "[object MyHome]"提防這個情況:
Object.prototype.toString=function(){return "[object CaiBuDao]";} console.log(Object.prototype.toString.call(1)); // "[object CaiBuDao]" console.log(Object.prototype.toString.call("1")); // "[object CaiBuDao]"參考
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toStringTag
https://www.softwhy.com/article-7583-1.html
https://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html
https://www.cnblogs.com/fundebug/p/why-does-javascript-need-symbol.html
總結
以上是生活随笔為你收集整理的javascript 自定义类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初期牙周炎如何治疗?
- 下一篇: Reflect.ownKeys