ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Javascript面向对象精要读书笔记

2020-05-11 20:53:31  阅读:301  来源: 互联网

标签:function name 读书笔记 Javascript person2 person1 var 精要 sayHi


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呗

标签:function,name,读书笔记,Javascript,person2,person1,var,精要,sayHi
来源: https://www.cnblogs.com/homehtml/p/12871826.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有