Object.defineProperty方法(详解)

Object.defineProperty方法(详解)OK 这一篇主要想说一下 Object defineProper 这个方法 这个方法也是 Vue 数据双向绑定原理的常见面试题所以也是有必要好好掌握的哦首先我们知道 JS 中是支持面向对象编程的 也是有着对象和类这样的概念 我们常见创建对象的方法应该是这样 varp1 name lisi 那我们 Object defineProper 这个方法有什么用呢 这个方法接收三个参数 1 属性所在的对象 2 属性的名字 3 一个描述符对象这个描述符对象是个什么东西呢 他可以

OK,这一篇主要想说一下Object.defineProperty这个方法。

var p1 ={ 
    name:"lisi", } 

那我们Object.defineProperty这个方法有什么用呢?

Object.defineProperty(p1,"name",{ 
    configurable : false, }) console.log(p1); //{ name: 'lisi' } delete p1.name; console.log(p1); //{ name: 'lisi' } 

通过这个方法设置好configurable 这个属性,delete就不能把name属性给删除掉了。

Object.defineProperty(p1,"age",{ 
    writable :false, value : 15, }) console.log(p1.age); //15 p1.age = 20; console.log(p1.age); //15 
Object.defineProperty(p1,"age",{ 
    enumerable:false }) for(var i in p1){ 
    console.log(p1[i]); } // lisi 

在通过这个方法给enumerable设置为false,这样对象就不能通过迭代器遍历出age这个属性的值了。

1.get:在读取属性时调用的函数,默认值是undefined
2..set:在写入属性的时候调用的函数,默认值是undefined

现在我们来用这两个方法来实践一下:

var book = { 
    _year : 2004, edition : 1 } Object.defineProperty(book,"year",{ 
    get: function(){ 
    return this._year }, set: function(newYear){ 
    if(newYear > 2004){ 
    this._year = newYear; this.edition += newYear - 2004 } } }) book.year = 2005; console.log(book.edition); // 2 console.log(book._year); //2005 

最后我们再说一下如何进行定义多个属性

var student = { 
   }; Object.defineProperties(student,{ 
    name:{ 
    writable:false, value:"lisi" }, age : { 
    writable:true, value : 16, }, sex:{ 
    get(){ 
    return '男'; }, set(v){ 
    p1.sex = v } } }) p1.sex = "男"; console.log(student.name + ":" + student.age); console.log(p1.sex); // 男 student.sex = "女"; console.log(student.sex); //男 console.log(p1.sex); // 女 

OK,关于写法应该也没有什么难点。

最后我在附上一个模拟Vue中v-module数据双向绑定原理的代码:

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> <style> #myInput { 
    width: 400px; height: 50px; font-size: 40px; color: red; } #contain { 
    margin-top: 20px; width: 400px; height: 200px; border: 1px solid salmon; } </style> </head> <body> <input id="myInput" type="text" /> <div id="contain"></div> <script> var text; window.data = { 
   }; var oIn = document.getElementById("myInput"); var oDiv = document.getElementById("contain"); oIn.addEventListener("input", function (e) { 
    text = e.target.value; console.log(text); window.data.value = text; }); Object.defineProperty(window.data, "value", { 
    get() { 
    return ""; }, set(v) { 
    oDiv.innerHTML = v; }, }); </script> </body> </html> 

那关于这一部分的知识也就整理完啦!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/201340.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午9:33
下一篇 2026年3月20日 上午9:33


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号