第一次写博客,写的不好期请见谅呢!!
接触这个东西,是我在学习写组件的的时候监听鼠标点击,点击下拉框意外的元素,自动收缩下拉框,在下拉框内点击了一个icon 图标,一直报错,显示无法识别thisClassName.indexOf('xxx'),
功能能正常使用,但是控制器老是报错,百度了,也没查到什么原因(具体就是说我谷歌浏览器打开了自动翻译导致的,尝试了但是没有用),后面我寻思我点击的图标是属于一个对象,所以所以使用indexOf() 所以就报错了,于是我写了如下代码,就不在报错了
init() {
/* 监听click事件,点击下拉选择框以外的元素,自动收缩下拉框 */
window.document.addEventListener('click', (e) => {
const thisClassName = e.target.className
// 判断是否点击的是图标
//这里首先打印了 Object.prototype.toString.call(thisClassName) 返回的是[object SVGAnimatedString]
//于是我在外套了一层判断 ,最后控制器没有报错
if (!Object.prototype.toString.call(thisClassName) === '[object SVGAnimatedString]') {
if (
thisClassName &&
this.selectListDisplay &&
thisClassName.indexOf('amber-select-box') < 0 &&
thisClassName.indexOf('amber-select-list') < 0 &&
thisClassName.indexOf('amber-select-option') < 0
) {
this.selectListDisplay = false
}
}
e.stopPropagation()
})
this.hasSuffixIcon = !!this.$slots.suffixIcon
},
下面这里我参考了新世界| 忧伤 的一些对Object.prototype.toString() 理解
作者:新世界丨忧伤
链接:理解Object.prototype.toString()_perwhy_wang的博客-CSDN博客
来源:csdn
每个对象都有一个toString() 方法,默认情况下,toString() 方法被每一个Object对象继承
作用:
使用toString()来检测对象类型,为了每一个对象能通过Object,prototy.toString来检测,需要以Function
.prototype.call() 或者Function.prototype().apply()的形式来调用,传递要检查的对象作为第一个参数
需要判断是什么数据类型时可以这么用:
下面这段我写了一个监测类型的公共方法 ,可以写在公共方法里面,用的时候可以用
console.log(Object.prototype.toString.call(item);//例如打印出 [object object]
if(Object.prototype.toString.call(item) === '[object object]' ){
// ...
}
//这里我写了一个监测类型的公共方法
function typeOf(obj) {
const {toString} = Object.prototype;
const map = {
'[object Boolean]' : 'boolean',
'[object Number]' : 'number',
'[object String]' : 'string',
'[object Function]' : 'function',
'[object Array]' : 'array',
'[object Date]' : 'date',
'[object RegExp]' : 'regExp',
'[object Undefined]': 'undefined',
'[object Null]' : 'null',
'[object Object]' : 'object'
//...
};
return map[toString.call(obj)];
}
// 如何使用
const t = typeOf(data)
if(t==='array'){
//...
}
...
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处