js高级知识点(第三天)

2019-08-04  本文已影响0人  js66

1、继承

    1.混入式继承

        for in

        使用for in 遍历1的属性,将所有的属性添加到例外一个对象上

        这时候就可以称 对象2 继承自对象1

    2.原型继承

        利用对象的动态属性,为原型对象添加成员

        直接替换原型对象

        1.替换前的对象,在替换之后,所有的成员都丢失

        2.替换原型对象的时候,需要手动去指向原型对象的constructor属性

            利用混入式给原型对象添加成员

        3.经典继承

            var 对象1 = Object.create(对象2);

            这个时候,创建出来的对象1继承自对象2

            问:Object.create方法存在兼容性?

            解决:

            1.检测浏览器是否支持Object.create方法,如果不支持,直接手动给Object添加create方法

            2.自定义函数,在函数内部判断浏览器是否支持Object.create方法,如果不支持,则手动创                  建对象返回,否则直接调用。

            javascript精粹中写道:

            function create(obj){

                    let obj = {}

                    obj.__proto__ = obj;

                    return obj;

              }

            因为 __proto__不是通用的属性(有些浏览器不一定支持)所以不推荐使用

            推荐:function create(obj){

            if(Object.create){

                    return Object.create(obj)

              }else{

            function F(){

             }

F.prototyp = obj;

return new F();

}

}

4.原型链

什么是原型链?

每个构造函数都有原型对象,每个对象都有构造函数,每个构造函数的原型对象都是对象,也就有构造函数

然后就形成一个链式的结构,我们称之为原型链

5.原型继承是什么?

通过修改原型链的结构,实现继承的方式就是原型继承。

6.对象和原型的成员关系

function Person(){}

var p = new Person();

p对象包含的成员有:Person.prototyp中的所有的成员和自身的成员。

Person.prototyp中的成员有:Object.prototyp的成员和自身的成员。

p对象可以访问Person.prototyp和Object.prototyp中的所有成员

7.Object.prototyp的成员

constructor:指向和该原型相关的构造函数

hasOwnProperty方法:判断对象本身是否拥有某个属性 p.hasOwnProperty(属性)

properIsEnumerable方法:1.判断属性是否属于本身对象,2.判断属性是否可以遍历

isPrototypeOf 方法 判断一个对象是不是另一个对象的原型对象 obj1.isPrototypeOf(obj2)

toString,tolocalString:将对象转为字符串 toLocalString转换成字符串的时候应用本地的设置格式

valueOf方法:在对象参与运算的时候,首先会调用valueOf方法获取对象的值,如果该值无法参与运算,将会调用toString方法

__proto__属性:指向对象的原型对象。

8.Function(3中创建函数的方式)

1.直接申明函数 function name(){}

2.函数表达式 var a = function(){}

3.new Function()

9.可以用Function来创建函数

var 函数名 = new Function() //创建一个空对象

var 函数名 = new Function('函数体') //创建一个没有参数的函数

var 函数名 = new Function('参数1','参数2','函数体')

反正最后一个参数为函数体,前面的参数为新参。Function接收的所有参数都为字符串类型

10.argument对象

argument对象是函数内部的一个对象,在调用函数的时候,系统会默认的将所有传入的实参存入改对象。(类数组)

注意:不管有没有形参,实参都会被传入改对象。

11.eval

可以将字符串转为js代码执行。

注意:当使用eval解析JSON格式字符串的时候,要注意,会将{}解析为代码段

1.可以在JSON格式字符串前面拼接“var 变量名 = ”

eval("var 变量名=  "+JSON格式的字符串)

2.可以在JSON格式字符 串前后拼接()

eval((JSON格式的字符串))

12.静态成员和实例成员

1.静态成员

通过构造函数去访问的属性和方法就是静态成员

2.实例成员

通过对象(实例)去访问的属性和方法就是实例成员

上一篇 下一篇

猜你喜欢

热点阅读