美文网首页
JS实现继承二

JS实现继承二

作者: doudouY075 | 来源:发表于2017-12-29 14:44 被阅读0次

1.this的指向

1)函数的调用方式发生改变会导致this的指向发生改变

      (1)函数作为对象的方法调用  this---->当前的对象

      (2) 函数作为普通对象调用    this---->window

      (3)使用new构造函数调用  this---->构造函数内部新创建的对象

      (4)使用call | apply调用(函数上下问调用)  this---->第一个参数

           obj.showName.call(o,1,2);

2)this的丢失问题

    以普通的函数调用,this指向window 

2.Object.prototype属性

    (1) constructor   指向对象的构造函数

    (2)hasOwnProtperty   判断某个对象是否有某个属性(实例)

    (3)isPrototypeOf    判断某个对象是否是指定对象的原型对象(判断的是一整条原型链)

    (4)propertyIsEnumerable   是否可以枚举,可以枚举,就可以通过for...in遍历

  Object.defineProperty(obj,'name',{

                 enumerable:false

             })------>for...in遍历不到name

(5) toString  返回对象的字符串描述信息

            1) 基本包装类型(String  Number  Boolean),返回对应的基本数据类型的字符串描述信息;

             2) object对象,返回[object object];

            3) 数组或者函数,返回对应的字符串形式;

            4) Number对象可以传参,表示进制转换;

  (6) toLocaleString  一般情况下和toString的用法一样,特殊情况下会做本地化处理

  (7) valueOf   返回对应的值

             1)基本包装类型,返回对应的基本类型数据;

             2)object 类型,返回的是对象本身;

             3)日期对象,返回时间戳

3.静态成员和实例成员

      成员:属性+方法

            (1) 静态成员:构造函数也是一个对象,也有自己的属性和方法(定义在构造函数上的属性和方法)

            (2) 实例成员:直接定义在对象上的属性和方法(一般写在构造函数内,构造函数默认创建对象,this指向该对象)

            (3) 原型成员:定义在原型对象上的属性和方法

4.Object的静态成员

(1)Object.apply  借用其他对象的方法

(2)Object.arguments  接收实参,保存实参,是一个对象,不是一个数组,是一个类似于数组的结构

(3)Object.assign  属性拷贝 

(4)Object.call  借用其他对象的方法

(5)Object.caller 返回值是一个函数,返回调用该函数的函数

                     如果在全局作用域中调用,返回null不是window

(6)Object.constructor  指向构造函数(构造器属性)

(7)Object.create 创建对象,并且设置该对象的原型对象

(8)Object.getOwnPropertyDescriptor  获取属性的描述信息

(9)Object.defineProperty   定义属性并设置属性的描述对象

                                      如果该属性已经存在,就默认是true

                                       如果定义一个新的属性,默认是false

(10)Object.getOwnPropertyName  获取对象所有实例属性的名字,返回一个数组,不能获取原型属性

(11)Object.keys  获取对象所有属性的名字,不可以获取原型属性和不可以枚举的属性

(12)Object.getPrototypeOf  获取某个对象的原型对象

(13)Object.preventExtensions | Object.isExtensible  禁止扩展,不可以添加属性,但是可以修改删除属性

(14)Object.seal  |  Object.isSealed   密封对象,禁止扩展,不能删除,可以修改

(15)Object.freeze  |Object.isFrozen  冻结对象,禁止扩展,不能删除,不能修改

5.Function构造函数的使用

创建函数的方式

(1)直接声明一个函数

(2)函数表达方式

(3)使用new 

(4)使用new Function

处理参数过长问题

     1)使用+拼接字符串

     2)使用反括号``

     3)使用JS模板

6.函数的隐藏参数

(1)arguements:接收实参,不是一个数组,是一个类似于数组的对象

(2)实参和形参

       1)在函数调用的时候,会默认把实参赋值给形参,保存在arguments中

       2)实参的个数大于形参,超出的可以通过arguments获取

       3)实参的个数小于形参,会依次赋值,多余的形参是undefined

(3)arguments.length : 实参的长度

     函数名.length : 形参的长度

7.caller和callee

caller : 返回一个函数,返回调用当前函数的函数,如果函数是在全局作用域中调用,返回null

callee : 函数的arguments对象有一个callee属性,返回函数自身,常用于递归调用

补充:递归调用

            (1)自己调用自己

             (2)有退出条件

求出1---n 的和

8.Function小应用(数组去重和求最大值)

去重:返回一个数组,数组中的元素不重复

      indexOf:返回数组中的某个元素的索引,如果该元素不存在,就返回-1

求最大值:

9.Function.prototype原型链

10.Object和Function的关系(面试题)

(1)JS中所有的对象都是继承Object;

(2)Object和Function互为对方的实例;

11.eval函数

(1)作用:可以把字符串转化为对应的JS代码

(2)eval和Function

         a . 都可以把字符串转为js代码;

         b . eval转为代码后直接执行,Function需要调用才会执行;

(3)eval用于处理JSON数据

         JSON数据:一种数据结构,用来表示数据,传输数据,本质是个字符串;

         JSON数据的key必须是双引号;

(4)处理JSON数据:

       a . 把JSON数据转为对象;

     b . 把对象转为JSON数据;

eval用于处理JSON数据,不建议使用(js是词法作用域,eval函数可以动态的调整(破坏)词法作用域,性能不好)

12.with简单说明

(1)作用 : 可以把变量的作用域引申到{ }中

(2)使用注意点:

       1)不能使用无前缀的方式添加属性

       2)this指向window

       3)在严格模式下,禁止使用

使用场合:当需要引用深层次的对象时可以缩短代码(对象.属性.属性......)不建议使用

13.私有变量和私有函数

直接写在构造函数内部的变量和函数称为私有变量和私有函数

特权方法:像text这样的实例方法,可以访问私有变量和函数,这个方法称为特权方法

相关文章

  • JS实现继承二

    1.this的指向 1)函数的调用方式发生改变会导致this的指向发生改变 (1)函数作为对象的方法调用 t...

  • JS中继承的实现

    JS中继承的实现 #prototype (js原型(prototype)实现继承) 全局的Function对象没有...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • JS继承的实现的几种方式

    前言 JS作为面向对象的弱类型语言,继承也是非常强大的特性之一,那么如何在JS实现继承呢? JS继承的实现方式 既...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

  • 我碰到的前端面试题(js)

    1.js实现继承有哪几种方法? 方法一:原型链继承 方法二: 构造函数继承 方法三: 组合继承 2.this指向问...

  • js中的继承-原型与原型链

    面向对象的语言支持两种继承方式,接口继承和实现继承js无法实现接口继承,只支持实现继承,主要通过原型链来实现。具体...

  • [读] JS中的call()和apply()方法

    JS中的call()和apply()方法 实现继承 多重继承

  • JS继承

    JS中的继承 许多OO语言都支持两种继承方式:接口继承和实现继承; 因为JS中没有类和接口的概念 , 所以JS不支...

  • 前端开发必须知道的JS(一) 原型和继承(转载)

    前端开发必须知道的JS(一) 原型和继承 原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会...

网友评论

      本文标题:JS实现继承二

      本文链接:https://www.haomeiwen.com/subject/nejfrxtx.html