日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript 自定义类型

發布時間:2024/9/19 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 自定义类型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。