自测题总结

230 阅读1分钟
window.n = 'window name'
let obj = {
    n: 'obj name',
    sayN(){
        console.log(this.n)
    }
}

let fn = obj.sayN//不要受这句话迷惑
fn()//调用fn时没有传任何的额外信息,fn里面的this就是window
window.n = 'window name'
let obj = {
    n: 'obj name',
    sayN: () => {
        console.log(this.n)
    }
}

obj.sayN()//注意此处sayN是箭头函数,箭头函数没有this,箭头函
//数的this和他作用域外面的this一样,此处他外面的this为window
class A{
    constructor(){
        this.name = 'A'
    }
    sayName(){
        console.log(this.name)
    }
}
class B extends A{
    constructor(){
        super()
        this.name = 'B'
    }
}

let obj = new B()
console.log(obj.sayName())
Promise.reject('error')
    .then( ()=>{console.log('success1')}, ()=>{console.log('error1')} )
    .then( ()=>{console.log('success2')}, ()=>{console.log('error2')} )
    //由于第一个then没有抛出拒绝,故第二个then以为该then已解决所有问题
<div id=app></div>
window.name = 'window name'
let app = new Vue({
    name: 'name 1',
    el: '#app',
    data(){
      return {name:'name 2'}
    },
    created(){
        console.log(this.name)
    }
})
//created中的this指向app,而app的name是data中的name
1)当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略。如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序,
 而是简单复用此处每个元素,并且确保它在特定索引下显示已被渲染过的每个元素。
 (2)为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性。
 (3)理想的 key 值是每项都有的且唯一的 id。
 (42.2.0+ 的版本里,当在组件中使用 v-for 时,key 是必须的。
var myMixin = {
 created: function () {
   this.hello()
 },
 methods: {
   hello: function () {
     console.log('hello from mixin!')
   }
 }
}

var Component = Vue.extend({
 mixins: [myMixin],
 methods: {
   hello(){
     console.log('hello from options')
   }
 }
})

var component = new Component()

//mixins优先使用组件本身的属性
function getSomething(){
    setTimeout(function(){
        return 'hello'
    })
}

let something = getSomething()
console.log(something)
//getSomething没有return
let _name = 'MyName'
let obj = {}
Object.defineProperty(obj, 'name', {
    get(){
        return _name
    },
    set(value){
        _name = value
    }
})

obj.name = 'NewName'
console.log(_name)