2-2对象和类的区别,举个现实中的例子
类与对象的区别:
1 ,类是一个抽象的概念,它不存在于现实中的时间/ 空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
2 ,对象是类的一个具体。它是一个实实在在存在的东西。
3 ,类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
4 ,对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
2-3你理解的面向对象
你理解的面向对象在我理解, 面向对象是向现实世界模型的自然延伸,这是一种“万物皆对象”的编程思想。在现实生活中的任何物体都可以归为一类事物,而每一个个体都是一类事物的实例。面向对象的编程是以对象为中心,以消息为驱动,所以程序= 对象+ 消息。
面向对象有三大特性,封装、继承和多态。
封装就是将一类事物的属性和行为抽象成一个类,使其属性私有化,行为公开化,提高了数据的隐秘性的同时,使代码模块化。这样做使得代码的复用性更高。
继承则是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类是一个特殊的父类-- 有父类的行为和属性,也有自己特有的行为和属性。这样做扩展了已存在的代码块,进一步提高了代码的复用性。
如果说封装和继承是为了使代码重用,那么多态则是为了实现接口重用。多态的一大作用就是为了解耦-- 为了解除父子类继承的耦合度。如果说继承中父子类的关系式IS - A 的关系,那么接口和实现类之之间的关系式HAS - A 。简单来说,多态就是允许父类引用 ( 或接口) 指向子类 ( 或实现类) 对象。很多的设计模式都是基于面向对象的多态性设计的。
2-4说一下原型链吧
在js里,继承机制是原型继承。继承的起点是 对象的原型(Object prototype)。
proto
- Object prototype也是对象,其 proto 指向null 。
函数对象
普通对象
- prototype的本质是普通对象。
- Function prototype比较特殊,是没有prototype的函数对象。
- new 操作得到的对象是普通对象。
当调取一个对象的属性时,会先在本身查找,若无,就根据 proto 找到构造原型,若无,继续往上找。最后会到达顶层Object prototype,它的 proto 指向null ,均无结果则返回undefined,结束。
由 proto 串起的路径就是『原型链』。
原型链是针对构造函数的,比如我先创建了一个函数,然后通过一个变量new 了这个函数,那么这个被new 出来的函数就会继承创建出来的那个函数的属性,然后如果我访问new 出来的这个函数的某个属性,但是我并没有在这个new 出来的函数中定义这个变量,那么它就会往上(向创建出它的函数中)查找,这个查找的过程就叫做原型链。
2-5什么是作用域链
作用域是针对变量的,比如我们创建了一个函数,函数里面又包含了一个函数,那么现在就有三个作用域
全局作用域== > 函数1 作用域== > 函数2 作用域
作用域的特点就是,先在自己的变量范围中查找,如果找不到,就会沿着作用域往上找。
了解 MVVM 吗,和 MVC 的区别
MVVM 与MVC 两者之间最大的区别就是:MVVM 实现了对View和Model的自动同步,也就是当Model的属性改变时,我们不用再自己手动操作Dom元素来改变View的变化,而是改变其属性后,该属性对应的View层数据会自动改变。
以Vue为例:
< div id= "vueDemo" >
< p> { { title } } < / p>
< button v- on: click= "clickEvent" > hello word< / button>
< / div>
var vueDemo = new Vue ( {
el: '#vueDemo' ,
data: {
title: 'Hello Vue!'
} ,
methods: {
clickEvent: function ( ) {
this . title = "hello word!"
}
}
} )
复制代码这里的html => View层,可以看到这里的View通过模板语法来声明式的将数据渲染进DOM 元素,当ViewModel对Model进行更新时,通过数据绑定更新到View。
Vue实例中的data相当于Model层,而ViewModel层的核心是Vue中的双向数据绑定,当Model发生变化时View也可以跟着实时更新,同理,View变化也能让Model发生变化。
总的看来,MVVM 比MVC 精简很多,不仅简化了业务与界面的依赖,还解决了数据频繁更新的问题,不用再用选择器操作DOM 元素。因为在MVVM 中,View不知道Model的存在,Model和ViewModel也观察不到View,这种低耦合模式提高代码的可重用性。
原型链,proto 和 prototype 的区别