xml地图|网站地图|网站标签 [设为首页] [加入收藏]

深入之创建对象的多种方式以及优缺点,深入之

来源:http://www.ccidsi.com 作者:集成经验 人气:186 发布时间:2019-05-02
摘要:JavaScript 深刻之new的效仿达成 2017/05/26 · JavaScript· new 原稿出处: 冴羽    再次回到函数的模拟实现 从第6个特色开始,大家举个例子: var foo = { value: 一 }; function bar() { console.log(this.

JavaScript 深刻之new的效仿达成

2017/05/26 · JavaScript · new

原稿出处: 冴羽   

再次回到函数的模拟实现

从第6个特色开始,大家举个例子:

var foo = { value: 一 }; function bar() { console.log(this.value); } // 再次来到了贰个函数 var bindFoo = bar.bind(foo); bindFoo(); // 1

1
2
3
4
5
6
7
8
9
10
11
12
var foo = {
    value: 1
};
 
function bar() {
    console.log(this.value);
}
 
// 返回了一个函数
var bindFoo = bar.bind(foo);
 
bindFoo(); // 1

至于内定 this 的对准,大家能够利用 call 大概 apply 达成,关于 call 和 apply 的因循古板达成,能够查看《JavaScript深远之call和apply的模拟达成》。大家来写第贰版的代码:

// 第一版 Function.prototype.bind2 = function (context) { var self = this; return function () { self.apply(context); } }

1
2
3
4
5
6
7
8
// 第一版
Function.prototype.bind2 = function (context) {
    var self = this;
    return function () {
        self.apply(context);
    }
 
}

写在日前

那篇文章讲明创设对象的种种情势,以及优缺点。

不过注意:

那篇文章更像是笔记,因为《JavaScript高端程序设计》写得真是太好了!

再次回到值效果完成

接下去大家再来看一种状态,假使构造函数有重返值,例如:

function Otaku (name, age) { this.strength = 60; this.age = age; return { name: name, habit: 'Games' } } var person = new Otaku('Kevin', '18'); console.log(person.name) // Kevin console.log(person.habit) // Games console.log(person.strength) // undefined console.log(person.age) // undefined

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function Otaku (name, age) {
    this.strength = 60;
    this.age = age;
 
<