JS实现继承二

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这样的实例方法,可以访问私有变量和函数,这个方法称为特权方法

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,521评论 0 5
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,204评论 0 4
  • 今天的事情发生了不少呢。那天小芳说了句:你和张没有可能吗?我瞬间反应超大,我挥动着我的手慌乱的解释说不可能的。她说...
    powerfullinky阅读 215评论 0 0
  • 《易经》这部古老神秘的宝典,它“广大悉备”,有天道、有地道、有人道;“范围天地之化而不过,曲成万物而不遗”。《易经...
    耘心阅读 2,372评论 0 3
  • 我的家,我的日子,简简单单,就是那种寻常百姓人家的日子! 我习惯把大当家的称之为某人,和某人的日子满打满算已经是二...
    烟雨縹湘阅读 437评论 1 13