在Javascript类中使用Setter和Getter时未捕获方法上的TypeError

xcitsw88  于 2022-12-28  发布在  Java
关注(0)|答案(1)|浏览(122)

我尝试在我的类中使用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)
nbnkbykc

nbnkbykc1#

当你把URL字符串传递给构造函数时,它会构建一个对象并将其赋值给this.url,这将导致setter函数被调用,但是setter * 也 * 需要一个普通字符串,所以你会得到那个异常。
在构造函数中,您真正需要的是

this.url = url;

将字符串参数传递给setter。

相关问题