vue2_设计模式

简介: vue2_设计模式

@TOC

响应式原理

认识Object.prototype.constructor

返回创建实例对象的 Object 构造函数的引用。注意,此属性的值是对函数本身的引用,而不是一个包含函数名称的字符串。对原始类型来说,如1,true和"test",该值只可读。

var o = {
   
   };
o.constructor === Object; // true

var o = new Object;
o.constructor === Object; // true

var a = [];
a.constructor === Array; // true

var a = new Array;
a.constructor === Array // true

var n = new Number(3);
n.constructor === Number; // true

image.png

对象的构造函数
function Tree(name) {
   
   
   this.name = name;
}

var theTree = new Tree("Redwood");
console.log( "theTree.constructor is " + theTree.constructor );

image.png

改变constructor

obj instanceof Object 检测Object.prototype是否存在于参数obj的原型链上。

function Type() {
   
   };
var types = [
    new Array, [],
    new Boolean,
    true, // remains unchanged
    new Date,
    new Error,
    new Function,
    function() {
   
   },
    Math,
    new Number,
    1, // remains unchanged
    new Object,
    {
   
   },
    new RegExp,
    /(?:)/,
    new String,
    "test" // remains unchanged
];

for (var i = 0; i < types.length; i++) {
   
   
    types[i].constructor = Type;
    types[i] = [types[i].constructor, types[i] instanceof Type, types[i].toString()];
};

console.log(types.join("\n"));

输出:
image.png

get、set

obj.__defineGetter__(prop, func)

prop
一个字符串,表示指定的属性名。
func
一个函数,当 prop 属性的值被读取时自动被调用。

// 请注意,该方法是非标准的:

var o = {
   
   };
o.__defineGetter__('gimmeFive', function() {
   
    return 5; });
console.log(o.gimmeFive); // 5


// 请尽可能使用下面的两种推荐方式来代替:

// 1. 在对象字面量中使用 get 语法
var o = {
   
    get gimmeFive() {
   
    return 5; } };
console.log(o.gimmeFive); // 5

// 2. 使用 Object.defineProperty 方法
var o = {
   
   };
Object.defineProperty(o, 'gimmeFive', {
   
   
  get: function() {
   
   
    return 5;
  }
});
console.log(o.gimmeFive); // 5
obj.__defineSetter__(prop, fun)

prop
一个字符串,表示指定的属性名。
fun
一个函数,当试图去为 sprop 属性赋值时被调用。通常你要给这个函数指定一个参数:

Object.defineProperty()

JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的特性。 getter/setter 对用户来说是不可见的,但是在内部它们让 Vue 能够追踪依赖,在 property 被访问和修改时通知变更。
每个组件实例都对应一个 watcher 实例,它会在组件渲染的过程中把“接触”过的数据 property 记录为依赖。之后当依赖项的 setter 触发时,会通知 watcher,从而使它关联的组件重新渲染。
image.png

MVVM设计模式(响应式原理)

View和Model之间并没有直接的联系,而是通过ViewMode进行交互,ViewModel通过双向数据绑定把View层和Model层连接了起来

const data = {
   
   };
let name = "张三";

Object.defineProperty(data, 'name', {
   
   
    get: function() {
   
   
        console.log('触发get')
        return name
    },
    set: function(newVal) {
   
   
        console.log('触发set')
        name = newVal
    }
})

//测试
console.log(data.name) // 触发get  张三
data.name = '李四' // 触发set

image.png

目录
相关文章
|
JavaScript
vue页面加载完毕之后执行
vue页面加载完毕之后执行
377 0
|
JavaScript 前端开发 CDN
Vue 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案
Vue 打包 chunk-vendors.js 文件过大导致页面加载缓慢解决方案
2887 0
|
2天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1072 0
|
11天前
|
人工智能 运维 安全
|
9天前
|
人工智能 测试技术 API
智能体(AI Agent)搭建全攻略:从概念到实践的终极指南
在人工智能浪潮中,智能体(AI Agent)正成为变革性技术。它们具备自主决策、环境感知、任务执行等能力,广泛应用于日常任务与商业流程。本文详解智能体概念、架构及七步搭建指南,助你打造专属智能体,迎接智能自动化新时代。
|
2天前
|
弹性计算 Kubernetes jenkins
如何在 ECS/EKS 集群中有效使用 Jenkins
本文探讨了如何将 Jenkins 与 AWS ECS 和 EKS 集群集成,以构建高效、灵活且具备自动扩缩容能力的 CI/CD 流水线,提升软件交付效率并优化资源成本。
262 0
|
9天前
|
人工智能 异构计算
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
敬请锁定《C位面对面》,洞察通用计算如何在AI时代持续赋能企业创新,助力业务发展!
|
10天前
|
机器学习/深度学习 人工智能 自然语言处理
B站开源IndexTTS2,用极致表现力颠覆听觉体验
在语音合成技术不断演进的背景下,早期版本的IndexTTS虽然在多场景应用中展现出良好的表现,但在情感表达的细腻度与时长控制的精准性方面仍存在提升空间。为了解决这些问题,并进一步推动零样本语音合成在实际场景中的落地能力,B站语音团队对模型架构与训练策略进行了深度优化,推出了全新一代语音合成模型——IndexTTS2 。
754 23
|
2天前
|
缓存 供应链 监控
VVIC seller_search 排行榜搜索接口深度分析及 Python 实现
VVIC搜款网seller_search接口提供服装批发市场的商品及商家排行榜数据,涵盖热销榜、销量排名、类目趋势等,支持多维度筛选与数据分析,助力选品决策、竞品分析与市场预测,为服装供应链提供有力数据支撑。
|
1天前
|
缓存 监控 API
Amazon item_review 商品评论接口深度分析及 Python 实现
亚马逊商品评论接口(item_review)可获取用户评分、评论内容及时间等数据,支持多维度筛选与分页调用,结合Python实现情感分析、关键词提取与可视化,助力竞品分析、产品优化与市场决策。