首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

框架篇-Vue面试题1-为什么 vue 组件 data 是函数不是对象

vue组件data属性值是函数,如下所示 export default { data() { // data是一个函数,data: function() {}简写 return...// data是一个对象 name: 'itclanCoder', }, }; 当一个组件被定义,data必须声明为返回一个初始数据对象函数,因为组件可能被用来创建多个实例 也就是说,在很多页面...,定义组件可以复用在多个页面 如果data是一个纯碎对象,则所有的实例将共享引用同一份data数据对象,无论在哪个组件实例修改data,都会影响到所有的组件实例 如果data是函数,每次创建一个新实例后...// 声明构造函数 function Person() {} Person.prototype.data = { // 原型下挂载一对象,并有name属性 name: 'itclanCoder...(p1,p2)都指向是同一份实体 原型下属性相当于是公有的 修改一个实例对象下属性,也会造成另一个实例属性跟着改变,这样在组件复用时候,肯定是不行,那么改成函数就可以了,如下代码所示 function

1.9K20
您找到你想要的搜索结果了吗?
是的
没有找到

是否还在疑惑Vue.js组件data为什么是函数类型而不是对象类型

分析Vue.js组件data为何是函数类型而非对象类型 引言 正文 一、Vue.jsdata使用 二、data为对象类型 三、data为函数 结束语 引言 要理解本篇文章,必须具备JavaScript...= new Vue() //此时vm2是这样 vm2 = { //这里data,是先获取了函数Vuedata(data值为函数),然后得到了data返回值 data: { name...55' } } //创建了一个Vue实例,会调用上面的定义函数 let vm1 =new Vue() //此时vm1应该是这样 vm1 = { //这里data是获取了函数Vuedata...因为我们刚开始定义了构造函数Vue时,给他内部data设置了一个值,该值为对象类型,对象类型在js称为引用数据类型,在栈是存储着一个指向内存该对象地址。...因为本文也是说到构造函数创建实例对象概念,如果对于JavaScript对象概念不理解的话,也可以翻阅我之前写一篇文章,全面剖析了js对象概念——充分了解JavaScript对象,顺便弄懂你一直不明白原型和原型链

3.4K30

JavaScript 设计模式学习第八篇- 工厂模式

当然这里如果菜品参数不太一致,可以在 addMenu 时候注册构造函数或者类,创建时候返回 new 出对应类实例,灵活变通即可。 3....Vue/React 源码工厂模式 和原生 document.createElement 类似,Vue 和 React 这种具有虚拟 DOM 树(Virtual Dom Tree)机制框架在生成虚拟...4.2. vue-router 源码工厂模式 工厂模式在源码应用频繁,以 vue-router 源码为例,代码位置:vue-router/src/index.js export default...源码里没有把工厂方法产品创建流程封装出来,而是直接将产品实例创建流程暴露在 VueRouter 构造函数,在被 new 时候创建对应产品实例,相当于 VueRouter 构造函数就是一个工厂方法...实例,此时 VueRouter 构造函数也就是工厂方法将会被多次执行,以分别获得不同实例。

30610

Vue首屏性能优化组件

参数option,IntersectionObserver构造函数第二个参数是一个配置对象,其可以设置以下属性: threshold属性决定了什么时候触发回调函数,它是一个数组,每个成员都是一个门槛值...属性IntersectionObserver.rootMargin只读,计算交叉时添加到根root边界盒bounding box矩形偏移量,可以有效缩小或扩大根判定范围从而满足计算需要,此属性返回值可能与调用构造函数时指定值不同...属性IntersectionObserver.thresholds只读,一个包含阈值列表,按升序排列,列表每个阈值都是监听对象交叉区域与边界区域比率,当监听对象任何阈值被越过时,都会生成一个通知...Notification,如果构造器未传入值,则默认值为0。...参数callback,一个在事件循环空闲时即将被调用函数引用,函数会接收到一个名为IdleDeadline参数,这个参数可以获取当前空闲时间以及回调是否在超时时间前已经执行状态。

84620

JavaScript this 指向所有场景详细分析(译)

严格模式会影响当前上下文环境(context),在函数直接调用场景,this 会变为 undefind,而不是上边介绍全局对象。...要始终记得,内部函数 this 指向(除了箭头函数)只和它调用类型相关(也就是本文介绍几种类型),而不是它所在函数上下文。...3.1 构造函数调用 `this` 指向 this 指向通过构造函数创建新对象 构造函数上下文是新创建对象。构造函数通过传来参数进行初始化对象,设置初始值、绑定事件监听函数等等。...唯一能够改变方式就是通过构造函数调用,但平常开发不建议采用这种调用方式。...那构造函数可以改变 this 指向吗?不会,调用箭头函数作为构造函数会抛出错误,TypeError: get is not a constructor。

48820

JavaScript6种继承方式总结

构造函数继承 第二种方式是借用构造函数方式,这种方式是通过在子类型函数调用超类型构造函数来实现,这一种方法解决了不能向超类型传递参数缺点,但是它存在一个问题就是无法实现函数方法复用,并且超类型原型定义方法子类型也没有办法访问到...组合继承 第三种方式是组合继承,组合继承是将原型链和借用构造函数组合起来使用一种方式。通过借用构造函数方式来实现类型属性继承,通过将子类型原型设置为超类型实例来实现方法继承。...这种方式解决了上面的两种模式单独使用时问题,但是由于我们是以超类型实例来作为子类型原型,所以调用了两次超类构造函数,造成了子类型原型多了很多不必要属性。...这种继承思路主要不是为了实现创造一种新类型,只是对某个对象实现一种简单继承,ES5定义Object.create()方法就是原型式继承实现。缺点与原型链方式相同。...这个拓展过程就可以理解是一种继承。这种继承优点就是对一个简单对象实现继承,如果这个对象不是自定义类型时,缺点就是没办法实现函数复用。

33210

我来重新学习 javascript 面向对象(part 4)

继续回到现场,我们做了一些分类,食物下面分了水果分类: // 定义一个 Food 构造函数 function Food() { this.type = "食物"; } // 定义了 Food 原型对象一个方法...= function() { return "food getType 方法"; }; // 定义一个 Fruit 构造函数 function Fruit() { this.type =...错误例子: // 定义一个 Food 构造函数 function Food() { this.type = "食物"; } // 定义了 Food 原型对象一个方法 getType Food.prototype.getType...原型链另外一个问题是,在创建子类型实例时,不能向超类型构造函数传递参数,或者说,是没办法在不影响所有对象实例情况下,给超类型构造函数传递参数。...利用了 call(或者 apply 或者 bind 这种函数)改变了构造函数 this 指向,才得以实现上面说到将不同构造函数放到同一个执行环境执行。

31910

Vue2.0总结———vue使用过程常见一些问题

:需要改端口   当然现在vue2.0webpack 已经自己会根据你端口号进行改正,从8080往后面进行递增,   不会发生端口号冲突情况,在vue1.0会经常出现 3....错误1:引进来vue-router没有use()   import Vue from 'vue'   import VueRouter from 'vue-router'   Vue.use(VueRouter...: _vuex2.default.store is not a constructor   这个报错是_vuex2.default.store 不是一个构造函数   因为在我们用vuex时候需要将用到...actions,mutations模块最终导出,   在导出时候new Vuex.StoreStore小写了,这里一定要大写,   就相当于我们在使用构造函数(类)时候首字母要大写   import...module:{    loaders:[      {        test:/\.css 6.组件之间通信从1.0过渡到2.0时引发错误vue1.0实现父子组件通信 -->通过props属性

1.7K30

社招前端二面必会手写面试题总结4

child进行视图更新了,不过在最后要记得将Dep.target指为null哦(其实在Vue是有一个targetStack栈用来存放target指向)那么最后我们只需要监听documentDOMContentLoaded...然后在回调函数实例化这个Vue对象就可以了coding :需要注意点:childNodes会获取到所有的子节点以及文本节点(包括元素标签空白节点)firstElementChild表示获取元素第一个字元素节点...,但注册到了不同 callbacks 数组,因为每次 then 都返回新 promise 实例(参考上面的例子和图)注册完成后开始执行构造函数异步事件,异步完成之后依次调用 callbacks...但是这里又徒增了一个新问题,那就是Parent3构造函数会多执行了一次(Child3.prototype = new Parent3();)。这是我们不愿看到。那么如何解决这个问题?...(s3)子类实例构造函数是Parent4,显然这是不对,应该是Child4。

71820

JS实现简单Vue

vue使用相信大家都很熟练了,使用起来简单。但是大部分人不知道其内部原理是怎么样,今天我们就来一起实现一个简单vue。...Object.defineProperty() 实现之前我们得先看一下Object.defineProperty实现,因为vue主要是通过数据劫持来实现,通过get、set来完成数据读取和更新。...constructor 构造函数主要是数据初始化 2、proxyData 数据代理 3、observer 劫持监听所有数据 4、compile 解析dom 5、compileText 解析dom里处理纯双花括号操作...最后把当前元素属性剔除出去,我们用Vue时候也是看不到这种指令,不剔除也 不影响 至于Watcher是什么,看下面就知道了 Watcher class Watcher{     constructor...,还需要update做什么,不是多此一举吗?

2.5K20

10 种 JavaScript 最常见错误

当异步获取数据时,不管它是在构造函数 componentWillMount 还是 componentDidMount 获取,组件在数据加载之前至少会呈现一次,当 Quiz 第一次呈现时, this.state.items...最简单方法:在构造函数初始化 state。...JavaScript 错误(通过 window.onerror 处理程序引发错误,而不是捕获在 try-catch )被浏览器跨域策略限制时,会产生这类脚本错误。...例如,如果您将您 JavaScript 代码托管在 CDN 上,则任何未被捕获错误将被报告为“脚本错误” 而不是包含有用堆栈信息。...ReferenceError: event is not defined 当您尝试访问未定义变量或超出当前作用域变量时,会引发错误。 您可以在 Chrome 浏览器测试。 ?

8.5K20

# Vue 之虚拟 DOM

第一步:得有一个创建虚拟 DOM 方法(称为 createElement) 第二步:通过虚拟 DOM 生成真实 DOM 方法(render) 第三步:将生成后真实 DOM 插入页面(renderDom...props: id="list" children:{type: "li",props:{class:"item"},children:"Item 1"} 明确了属性和值,我们可以借助构造函数去批量创建虚拟..., value); } } 通过 renderDom 将生成后真实 DOM 挂载到制定元素上 // renderDom.js // 将生成真实DOM,添加到目标元素 function renderDom...包括几个步骤: 用 JavaScript 对象结构表示 DOM 树结构;然后用这个树构建一个真正 DOM 树,插到文档当中当状态变更时候,重新构造一棵新对象树。...# 结语 Vue 编译也分两个版本 一个是运行时+编译器,比如使用 vue-cli,是通过 webpack vue-loader 将模板编译成真实 DOM 一个是运行时,比如直接使用 CDN 将整个

17511

前端工程师常考手写面试题指南

(s3)子类实例构造函数是Parent4,显然这是不对,应该是Child4。...,但是这个执行不是真的到了时间立即执行,它真正作用是每隔一段时间将事件加入事件队列中去,只有当当前执行栈为空时候,才能去从事件队列取出事件执行。...为true表示构造函数情况。...this : context, args.concat(innerArgs) ); } // 如果绑定构造函数,那么需要继承构造函数原型属性和方法:保证原函数原型对象上属性不丢失...在Vue,有时候 A 组件和 B 组件中间隔了很远,看似没什么关系,但我们希望它们之间能够通信。这种情况下除了求助于 Vuex 之外,我们还可以通过 Event Bus 来实现我们需求。

40330

JS this 在各个场景下指向

this 又是什么样 this 在严格模式下函数调用为 undefined 严格模式是在 ECMAScript 5.1引入,它提供了更好安全性和更强错误检查。...当属性访问myObject.myFunction前面有一个new关键词时,JS会执行构造函数调用而不是原来方法调用。...构造函数 this 在构造函数调用 this 指向新创建对象 构造函数调用的上下文是新创建对象。它利用构造函数参数初始化新对象,设定属性初始值,添加事件处理函数等等。 ?...在构造函数里添加了一个验证this instanceof Vehicle来确保执行上下文是正确对象类型。如果this不是Vehicle,那么就会报错。...将它作为构造函数调用(new get())会抛出一个错误:TypeError: get is not a constructor。 7.2.

4.4K10

Google Earth Engine(GEE)——图表概述(记载图表库)

此示例还假设您drawChart在网页某处定义了一个名为 JavaScript 函数。...但是您可以在一次调用列出您需要所有软件包,因此无需进行单独调用。 如果您使用是 ChartWrapper,则必须显式加载您需要所有包,而不是依赖 ChartWrapper 自动为您加载它们。...对于Geochart和 Map Chart,您必须同时加载旧库加载器和新库加载器。再次,这是只针对之前V45版本,你应该不会更高版本做到这一点。...当前: 这是针对最新官方版本,每次我们推出新版本时都会发生变化。理想情况下,此版本经过良好测试且没有错误,但是一旦您对它工作感到满意,您可能希望指定一个特定冻结版本。...请注意,对于所有这些方式,您都需要提供函数定义,而不是调用函数。您提供函数定义可以是命名函数(因此您只需提供其名称)或匿名函数。当包完成加载时,将不带参数调用此回调函数

11710

Vue生命周期(11个钩子函数)「建议收藏」

Vue生命周期 生命周期初识 生命周期详解(八个钩子函数) 生命周期 生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue实例; 在创建实例过程,需要设置数据监听,编译模板...,添加自己代码; 生命周期钩子函数this,会默认指向vue实例; 钩子函数 beforeCreate created[可以获取数据及方法] beforeMount mounted[.../node_modules/vue/dist/vue.js"> // 生命周期: Vue是一个构造函数,当执行执行这个函数时,相当于初始化vue...当数据更新时,立即将内存模板编译成4li;最后挂载到真实DOM上;不会引发beforeUpdate函数调用 }, computed:{...并且直接挂载到了真实DOM,当数据更新时, 立即将内存模板编译成4li;再次把最新挂载到真实DOM上;会引发beforeUpdate函数调用 // VUEDOM更新是异步; // 如何在

3.3K21
领券