博客地址: https://ainyi.com/8

采用defineProperty的两个方法get、set

示例

 <!-- 表单 -->
<input type="text" id="input">
<!-- 展示 -->
<p id="desc"></p>
 let obj = {};
let temp = {};//采用临时变量代理obj
Object.defineProperty(obj,'name',{
//获取obj的name属性会触发
get(){
return temp['name'];
},
//给obj的name属性赋值会触发
set(val){
temp['name'] = val;//改变temp的结果
input.value = val;//将值赋值到输入框
desc.innerText = val; //将值显示到输入框下面
//obj.name = val; //死循环,不能采取这种方式赋值,采用temp代理方式赋值和取值
}
}); //设置了id值不需要document.getElementById()
//调用上面的set方法,设置初始值
obj.name = "message";
//调用上面的get方法,获取属性值并放到输入框
input.value = obj.name; //输入框的变化时执行,这里不能使用箭头函数,因为箭头函数不绑定this,找的是上下文的this
input.addEventListener('input',function(){
//当值变化时会调用set方法
obj.name = this.value;
});

defineProperty扩展

 // Object.defineProperty(obj,'name',{
// configurable:false, //是否可删除
// writable:false, //是否可重新赋值
// enumerable:false,//是否可枚举,false不能for in循环和Object.keys(obj),
// value:1
// });
// Object.keys(obj)返回一个给定对象obj的所有可枚举属性的字符串数组,即obj的属性名数组 // 若有:
let obj2 = {}; // 一方面设置属性和值
obj2.name = 1;
// 等同于:(后三个属性的默认值都是true)
Object.defineProperty(obj2, "name", {
value : 1,
writable : true,
configurable : true,
enumerable : true
}); // 另一方面设置属性和值
Object.defineProperty(obj2, "name", {
value : 1
});
// 等同于:(后三个属性的默认值都是false)
Object.defineProperty(obj2, "name", {
value : 1,
writable : false,
configurable : false,
enumerable : false
});

博客地址: https://ainyi.com/8

vue 双向数据绑定原理的更多相关文章

  1. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  2. Vue双向数据绑定原理分析(转)

    add by zhj: 目前组里使用的是前端技术是jQuery + Bootstrap,后端使用的Django,Flask等,模板是在后端渲染的.前后端没有分离,这种做法有几个缺点 1. 模板一般是由 ...

  3. Vue双向数据绑定原理深度解析

    首先,什么是双向数据绑定?Vue是三大MVVM框架之一,数据绑定简单来说,就是当数据发生变化时,相应的视图会进行更新,当视图更新时,数据也会跟着变化. 在分析其原理和代码的时候,大家首先了解如下几个j ...

  4. 手写MVVM框架 之vue双向数据绑定原理剖析

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. Vue双向数据绑定原理解析

    基本原理 Vue.采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter和getter,数据变动时发布消息给订阅者,触发相应函数的回调 ...

  6. Vue 双向数据绑定原理分析 以及 Object.defineproperty语法

    第三方精简版实现 https://github.com/luobotang/simply-vue Object.defineProperty 学习,打开控制台分别输入以下内容调试结果 userInfo ...

  7. Vue双向数据绑定原理

    https://www.cnblogs.com/kidney/p/6052935.html?utm_source=gold_browser_extension

  8. 详解 vue 双向数据绑定的原理,并实现一组双向数据绑定

    1:vue 双向数据绑定的原理: Object.defineProperty是ES5新增的一个API,其作用是给对象的属性增加更多的控制Object.defineProperty(obj, prop, ...

  9. vue 双向数据绑定的实现学习(二)- 监听器的实现

    废话:上一篇https://www.cnblogs.com/adouwt/p/9928278.html 提到了vue实现的基本实现原理:Object.defineProperty() -数据劫持 和  ...

随机推荐

  1. Chrome 启动全屏,并可以F11退出

    新建start.bat文件,作用,打开浏览器,并模拟按下F11,全屏,内容如下: start C:\Program" "Files" "(x86)\Google ...

  2. web 11

    Obtaining the JSON: 1.首先,我们将把要检索的JSON的URL存储在变量中. 2.要创建请求,我们需要使用new关键字从XMLHttpRequest构造函数创建一个新的请求对象实例 ...

  3. VUE-利用OSS BrowserJS-SDK实现阿里OSS前端上传

    项目中遇到利用阿里OSS上传文件,线上很多示例用到了各种SDK,却没有看到OSS BrowserJS-SDK相关示例,鉴于脑子不好使,记一下. 封装upload相关组件  使用npm安装SDK的开发 ...

  4. 用挂载,使用NTFS移动硬盘,拷贝iPhone里的照片,拷到MAC

    2. 写权限挂载移动硬盘 1) mount查看 2) diskutil umount /dev/disk2 3) sudo mount_ntfs -o rw,nobrowse /dev/disk2s1 ...

  5. 浅谈C++ STL

    C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量.链表.队列.栈. C++ 标准模板库的核心包括以 ...

  6. 记录k8s:k8s1.8.4无坑离线安装

    安装部署: 1. 使用vagrant 准备3太虚拟机,自己使用Vbox 准备3太也可以. 2. 按照 https://github.com/gjmzj/kubeasz 安装. 3. 使用letsenc ...

  7. 清除SqlServer日志

    --在SQL2008中清除日志就必须在简单模式下进行,等清除动作完毕再调回到完全模式. USE [master]GO --GPSLocus是要清除日志的数据库名称ALTER DATABASE [DbN ...

  8. 数组Array和列表集合ArrayList、LinkedList和Vector的区别

    一.ArrayList和Vector的区别 ArrayList与Vector主要从以下方面来说. 1.同步性: Vector是线程安全的,也就是说是同步的,而ArrayList是线程序不安全的,不是同 ...

  9. js注入攻击

    注入攻击一般指用户输入数据导致页面乃至整个网站.服务器异常的情况. 直接看一个例子: <html> <head> <title>Test</title> ...

  10. [Swift]LeetCode80. 删除排序数组中的重复项 II | Remove Duplicates from Sorted Array II

    Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twic ...