Vue响应式原理
为什么不支持IE8
其实是依赖**Object.defineProperty()**
,进行数据挟持的,而这个api在IE8下仅仅支持Dom对象不支持原生对象,所以Vue2.x是不支持IE8及以下的浏览器。
Object.defineProperty(object, propertyname, descriptor )
此函数有3个参数,均是必传的参数。这个函数的特性其实很像c#的属性,有c#基础的理解起来应该很容易。
object:需要设置的对象
propertyname:需要设置的属性名(对象的键名)
-
descriptor:描述符,一个对象,用于设置属性的特性。
{ value:undefined, // 表示此属性的值。 writable:false, // 决定此属性是否可写 configurable:true, /* 决定此属性是否可配置, 如果为false则writable, configurable, enumerable这些属性的设置都将无效. 即使重新调用defineProperty函数也无效。 特别指出 试图修改configurable的值会抛出异常。 */ enumerable:false, // 是否可枚举 get:undefined, // 函数,当取值时执行 set:undefined, // 函数,当设置值时执行 }
// 此demo示范get和set的作用,其他的属性自行尝试。 const setName = function (newValue) { console.log('新的值', newValue) } const getName = function () { console.log('取值啦') } var demo = { name: '初始值' } Object.defineProperty(demo, 'name', { set: setName, get: getName }) demo.name = '初始值2' // -> 新的值 初始值2 let name = demo.name // -> 取值啦
Vue-cli3.0一些变动
- 集成sass/scss只需要
yarn add sass-loader node-sass
- 设置scss全局函数要在
vue.config.js
里添加
module.exports = {
// ...
css: {
loaderOptions: {
sass: {
data: `
@import "@/你的全局scss文件";
`
}
}
}
}