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存在另一个内部文件,并且值为“”。
person.name
这个操作会进入你定义的get
方法中,然后你在get
方法中又访问了person.name
,就死循环了。
你把'name'
改成name
变量,自然就不会死循环了