和阿昌老师的每日问答Day2

155 阅读1分钟

问题

  1. 水平垂直居中的方法
  2. 简述不同情况下this指向
  3. 谈谈你对MVVM的理解

















回答

1.水平垂直居中的方法

居中元素定宽高

  • absolute + 负margin
  • absolute + margin auto
  • absolute + calc

居中元素不定宽高

  • absolute + transform
  • lineheight
  • writing-mode
  • table
  • css-table
  • flex
  • grid

2. 简述不同情况下this指向

  1. 纯粹的函数调用

这是函数的最通常用法,属于全局性调用,在浏览器中全局对象就是window。

function a(){
    var user = "Tom";
    console.log(this.user); //undefined
    console.log(this); //Window
}
a();
  1. 作为对象方法的调用

函数还可以作为某个对象的方法调用,这时this就指这个上级对象。

var name = "user1";
var obj= {
    name: "user2",
    getName: function () {
        console.log(this.name);
    }
}
obj.getName();//user2
  1. 函数作为构造函数调用

函数作为构造函数调用时this指向用该构造函数构造出来的新对象。

function test(){
    this.x = 1;
}
var o = new test();
console.log(o.x);//1

(引申 改变this指向)

3. 谈谈你对MVVM的理解

MVVM分为Model、View、ViewMode三者。

  • Model:代表数据模型,数据和业务逻辑都在Model层中定义;
  • View:代表UI视图,负责数据的展示;
  • ViewModel:负责监听Model中数据的改变并且控制视图的更新,处理用户交互操作;

Model和View并无直接关联,而是通过ViewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系,因此当Model中的数据改变时会触发View层的刷新,View中由于用户交互操作而改变的数据也会在Model中同步。 这种模式实现了Model和View的数据自动同步,因此开发者只需要专注对数据的维护操作即可,而不需要自己操作dom。