js中Object.defineProperty小问题

问题遇到的现象和发生背景

js中Object.defineProperty方法,按下方代码块这样用时,在控制台获取person.name会出现堆栈溢出错误,但是我把代码中Object.defineProperty第二个参数由'name'改成name时,就可以从控制台访问和修改。这是为什么?

html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="../js/vue.js">script>
    <title>Titletitle>
head>
<body>
<script>
    let person={
        name:'张三',
        number:'123'
    }
    Object.defineProperty(person,'name',{//当由'name'改为name时就可以通过控制台访问到
        get:function(){
            return person.name
        },
        set:function(newValue){
            person.name=newValue
        },
    })
script>
body>
html>

第二个参数可以是普通字符串或字符串变量。’name‘表示person里的属性,而name是一个变量,可以看到上下文没有声明这个变量,为什么没报错呢?只因为这个name存在另一个内部文件,并且值为“”。

img

person.name这个操作会进入你定义的get方法中,然后你在get方法中又访问了person.name,就死循环了。
你把'name'改成name变量,自然就不会死循环了

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^