this的判断规则、Object.assign

this的判断规则

每个函数的this是在调用时被绑定的,this的值完全取决于函数的调用位置。

如果要判断一个运行中的函数的this绑定,就需要找到这个函数的直接调用位置。找到之后就可以顺序应用下面四条规则来判断this的绑定对象。
1 . 有new调用?绑定到新创建的对象。
2 . 由call或者apply(或者bind)调用?绑定到那个指定的对象。
3 . 由上下文对象调用?绑定到那个上下文对象。
4 . 默认:在严格模式下绑定到 undefined,否则绑定到全局对象(window)。

注意 : ES6中的箭头函数不使用以上四条this绑定规则,而是根据当前词法作用域来决定this(外层函数或全局作用域来决定),箭头函数会继承外层函数调用的this绑定,这和selt = this机制一样。箭头函数的this绑定无法被修改。

例子 :
new绑定:
在这里插入图片描述
显示绑定,call /apply/bind
在这里插入图片描述
隐式绑定,上下文绑定
在这里插入图片描述
除了以上几种之外的其他绑定,默认绑定:
在这里插入图片描述


对象遍历

  • for … in : 循环遍历对象的属性值;
    for...in

数组遍历

以下方式通过遍历数组下标得到值:

  • forEach() : 遍历数组中的所有值并忽略回调函数中的返回值;
  • map( callback ) : map方法对类型化数组中的元素调用提供的 callback函数,按照顺序,并且会从结果构造新的类型化数组
  • every() : 会一直运行直到回调函数返回false;
  • some() : 一直运行直到回调函数返回true;

以下方式直接遍历数组的值:

  • for … of : ES6提供的直接遍历数组值方法
    在这里插入图片描述
    Object.assign( sourceobj, targetobj)
    实现对象的浅复制:
    1.直接变量(例 a:2)复制目标对象的值, 源对象的值与目标对象互不影响,改变其中一方值不会影响到另一方。
    2.属性值是对象(包括普通对象、函数和数组)时则复制的是引用值
function minin() {
  console.log('*********minin')
}
var obj = { a: 123 }

var targetObj = { c: 1, obj: obj, func: minin }
var newObj = Object.assign({}, targetObj)

//对新对象进行赋值操作
newObj.obj.a = 34
newObj.c = 2

//对新对象newObj的直接量进行赋值,不会影响到原对象直接量的值
console.log(targetObj.c) //1
console.log(newObj.c) //2

//对newObj中引用对象进行赋值,改变了共同引用的obj的值
console.log(newObj.obj.a) //34
console.log(targetObj.obj.a) //34
console.log(obj) //{a:34}

//引用的是同一个函数 minin
console.log(newObj.func === targetObj.func) //true

  • undefined : 一个声明未定义(赋值)的变量的初始值,或没有实际参数的形式参数。它是 JavaScript 基本类型 之一。
  • 一个函数如果没有使用return语句指定返回值,调用之后就会返回一个undefined值。
  • null :特指对象的值未设置。它是 JavaScript 基本类型 之一。

扩展知识
其他语言中的类:
类初识:
以建筑为例子:

  • 类:建筑设计图
  • 实例:实际建筑物
  • 构造函数:与类名相同,由他进行类的实例化,new 类名(参数),充当建筑工人。

类的继承:
子类通过extends关键字继承父类的基本属性。多态技术使子类可以重写父类的方法,或直接使用父类的方法。

传统的面向类的语言中,构造函数是属于类的。然而,在JavaScript中恰好相反,它的“类”是属于构造函数的(类似Foo.prototype… 这样的类型引用)。

类可以是一个界面,一个模块,一个简单的方法。

以上内容参考书籍/文档:
《你不知道的JavaScript》
MDN

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值