Javascript面向对象精要读书笔记

Javascript面向对象精要读书笔记

1、下面代码的现实实行历程是什么?

var name = 'fan'
var str = name.charAt(0)     
console.log(str)
var name = 'fan'
var temp = new String(name)
var str = temp.charAt(0)
temp = null
console.log(temp)

2、运用原始值和原始封装范例是有区分的

var flag = new Boolean(false)
if(flag){
    console.log(flag)
}

由于flag是被剖析成一个对象的,所以肯定是真的

3、函数是对象,函数有两种字面情势,第一种是函数声明,以function关键字开首背面跟函数名字。

function add(){
    //...
}

第二种情势是将函数作为一个值赋值给变量

var add = function(){
    
}

函数声明会被提拔到上下文顶部,能够先运用再定义

var result = add()
function add(){
    //...
}

而函数表达式仅能经由过程变量援用,因此是没有办法提拔的。所以下面会报错

var result = add()
var add = function(){
    //...
}

4、函数的length属性示意该函数的希冀参数个数,完成一个函数,求其接收恣意数目的参数并返回他们的和

function sum(){
    var result = 0,
        i = 0,
        l = arguments.length
    while(i < l){
        result += arguments[i]
        i++
    }
    return result
}

5、函数重载的明白,下面的函数输出什么?并诠释下。

function sayHello(name){
    console.log(name)
}

function sayHello(){
    console.log('default msg')
}

sayHello('fan')

诠释:

var sayHello = new Function('name', 'console.log(name)')

var sayHello = new Function("console.log('default')")

sayHello('fan')

能够应用参数的个数来模仿函数的重载

6、转变函数的this。

1、call()要领

function sayHi(context){
    console.log(context + ':' + this.name)
}

var person1 = {
    name: 'fanchao'
}

var person2 = {
    name: '陈冠希'
}

var name = '小姐姐'

sayHi.call(this, 'global')
sayHi.call(person1, 'person1')
sayHi.call(person2, 'person2')

这里是显现的指定this的值,并非让javascript引擎去自动指定this

2、apply()要领

function sayHi(context){
    console.log(context + ':' + this.name)
}

var person1 = {
    name: 'fanchao'
}

var person2 = {
    name: '陈冠希'
}

var name = '小姐姐'

sayHi.apply(this, ['global'])
sayHi.apply(person1, ['person1'])
sayHi.apply(person2, ['person2'])

apply基本上和call的体式格局是一样的,就是接收的第二个参数不一样,是以数组的情势传入函数的,call是须要有若干就要以睁开的体式格局传入参数比方:

xxxxFun.call(xxObj, param1,param2,...)

3、bind()要领

bind要领是ECMAscript 5中的要领,和之前的call和apply有点不一样

function sayHi(context){
    console.log(context +  ':' + this.name)
}

var person1 = {
    name: 'fanchao'
}

var person2 = {
    name: '陈冠希'
}

//为person1建立一个要领sayHiPerson1
var sayHiPerson1 = sayHi.bind(person1)
sayHiPerson1('person1')

// 为person2建立一个要领sayHiPerson2
var sayHiPerson2 = sayHi.bind(person2,'person2')
sayHiPerson2()
// 由于this已绑定给了person1,所以name照样person1的
person2.say = sayHiPerson1
person2.say('person2')

sayHiPerson1要领没有绑定参数,所以本身照样要在挪用的时刻传参数

sayHiPerson2不仅绑定了this指向还绑定了第一个参数。参数的绑定相似call要领。
一个好的食用链接,给个star呗

    原文作者:Charming
    原文地址: https://segmentfault.com/a/1190000010475197
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞