JS基础
树叶开心
这个作者很懒,什么都没留下…
展开
-
013-使用Proxy实现数据劫持
let obj = { a: 1, b: 2, c: { d: 3 } } let handler = { get(target, key) { if(typeof target[key] === 'object') { return new Proxy(target[key], handler); ...原创 2019-12-14 20:43:43 · 310 阅读 · 0 评论 -
012-使用defineProperty实现简单的数据劫持
let obj = { a: 1, b: 2, c: { d: 3 } } function defineReactive(target, key, value) { observer(value); Object.defineProperty(target, key, { get() { r...原创 2019-12-14 20:37:08 · 180 阅读 · 0 评论 -
011-js常用数组方法
1.创建数组 js中创建数组有两种方式: 使用Array构造函数 var name = new Array(2); // 创建一个length为2的数组 var name = new Array(['James', 'Jack']); // 创建了包含两个字符串的数组 使用数组字面量 var name = ['James', 'Jack']; // // 创建了包含两个字符...原创 2019-11-24 13:55:11 · 207 阅读 · 0 评论 -
010-js继承
1.原型链继承 构造函数、原型和实例之间的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个原型对象的指针。 function SuperType() { this.property = true; } SuperType.prototype.getSuperValue = function() { return this.property...原创 2019-11-23 19:04:59 · 147 阅读 · 0 评论 -
009-new实现原理
在007-js创建对象的几种方法博客中,我们使用构造函数创建了对象,但是这里有个问题,new到底做了什么呢,导致构造函数模式和工厂模式不一样呢。 我们借用《JavaScript高级程序设计》中的定义:要创建Person的新实例,必须使用new操作符,以这种方式调用构造函数实际上会经历以下4个步骤: 创建一个新对象 将构造函数的作用域赋给新对象(因此this就指向了这个新对象) 执行构造函数中的代...原创 2019-11-16 22:39:23 · 147 阅读 · 0 评论 -
007-js创建对象的几种方式
1.字面量方式创建 var person = { name: 'James', age: 20, say: function() { console.log(this.name); } } 此种方式缺点:创建很多对象的时候,会产生很多重复代码 2.工厂模式 为了解决重复代码的问题,使用工厂模式创建对象 function createPerson(n...原创 2019-11-16 21:49:57 · 133 阅读 · 0 评论 -
006-js实现科里化
什么是科里化 柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。 因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。 如何实现科里化 废话不多数,直接上代码 const add = (a, b, c, d, e) => { return a ...原创 2019-11-16 13:35:11 · 157 阅读 · 0 评论 -
005-apply的用法实现原理
apply的用法 apply的用法和call类似,区别在于,apply的第二个参数是一个数组 apply实现原理 apply的实现原理和call的类似,区别在于第二个参数的处理 Function.prototype.myApply = function(context, arr) { var context = context || window; context.fn = th...原创 2019-11-16 13:04:18 · 187 阅读 · 0 评论 -
004-call的用法和实现原理
在002-判断JS数据类型中我们使用了Object.prototype.toString.call()方法来判断数据类型,那么这个call方法是怎么使用的呢,这篇文章我们来探究这个问题。 call的用法 MDN定义:使用一个指定的 this 值和单独给出的一个或多个参数来调用一个函数 语法:fun.call(thisArg, arg1, arg2, ...) 应用: 使用call实现继承 获取数...原创 2019-11-09 09:53:12 · 320 阅读 · 0 评论 -
003-instanceof原理
实现一个instanceof 上篇文章002-判断JS数据类型写到,instanceof可以判断引用类型,那么他是怎么判断的呢,现在我们来实现一个自己的instanceof。 function myInstanceof(leftData, rightData) { let rightDataProto = rightData.prototype; // 找到右边值的prototype if(...原创 2019-11-06 21:10:07 · 116 阅读 · 0 评论 -
002-判断JS数据类型
1、typeof typeof 返回一个表示数据类型的字符串,返回结果包括:number、boolean、string、object、undefined、function、symbol等7种数据类型。 举个栗子: typeof null; // object typeof undefined; // undefined typeof 1; // number typeof '1'; // ...原创 2019-11-06 20:43:11 · 119 阅读 · 0 评论 -
008-JS原型和原型链(1)
1.第一个概念:构造函数 关于创建对象我会在之后的博客中写,这里使用构造函数创建对象。现在有了第一个概念:构造函数。 function Person() { } var person = new Person() person.name = 'James' console.log(person.name) 2.第二个概念:prototype 每个函数都有一个prototype属性,如下所示: ...原创 2019-03-21 15:01:35 · 201 阅读 · 0 评论 -
001-JS基本类型和引用类型
1.什么是基本类型和引用类型? ECMAScript的变量有两种不同数据类型的值:基本类型和引用类型 基本类型指的是简单的数据段 引用类型是可能由多个值构成的对象 2.基本类型和引用类型分别有哪些? 基本类型有:Undefined、Null、Boolean、Number、String、Symbol(ES6) 引用类型有:Object 3.基本类型和引用类型的区别 基本类型和引用类型的区别可...原创 2019-03-20 15:10:16 · 188 阅读 · 0 评论 -
this的指向
常用的this指向可分为以下4种 作为普通函数 作为对象的方法 构造器调用 call、apply调用 1.作为普通函数 当this出现在普通函数中时,此时的this总是指向全局对象,浏览器环境中,就是window对象。示例如下: window.name = "James" function getName() { console.log(this.name) } getName() 2.作...原创 2019-03-19 14:59:59 · 171 阅读 · 0 评论 -
JS事件委托
事件委托是什么 事件委托是给父元素绑定事件,监听子元素的冒泡事件。 为何使用事件委托 如何使用事件委托原创 2019-03-14 13:13:17 · 370 阅读 · 0 评论