我尝试在我的类中使用setter和getter将url字段设置为一个具有自己属性(value、domain、icon)的对象,但是当我在url参数上使用字符串方法(如“startsWith()”)时,我得到错误“Uncatched TypeError:url.startsWith不是函数。”
在尝试这样做之前,我阅读了有关setter和getter的内容,并了解到为了避免setter和getter名称在属性名称上出现问题,我只需要在Setter或Getter内部的属性名称开头使用带有“_”的属性。
此示例的简单HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body style="background-color: #333;">
<script src="./main.js" type="module"></script>
</body>
</html>
JS系统
class Url{
constructor(url){
this.url = {
value : url,
domain : url.startsWith('https://') ? url.split(8) : url.split(7),
icon : url + 'favicon.ico'
}
}
get url(){
return this._url
}
set url(url){
this._url = {
value : url,
domain : url.startsWith('https://') ? url.split(8) : url.split(7),
icon : url + 'favicon.ico'
}
}
}
const test = new Url("https://youtube.com")
console.log(test.url.domain)
1条答案
按热度按时间nbnkbykc1#
当你把URL字符串传递给构造函数时,它会构建一个对象并将其赋值给
this.url
,这将导致setter函数被调用,但是setter * 也 * 需要一个普通字符串,所以你会得到那个异常。在构造函数中,您真正需要的是
将字符串参数传递给setter。