美文网首页
面向对象小知识

面向对象小知识

作者: MGd | 来源:发表于2017-03-29 19:27 被阅读8次
    • instanceOf
    • 作用:判断某个对象是否是由指定的构造函数创建出来的
    • 使用方法:对象 instanceOf 构造函数
    • 例子:
    function Person(name,age) {
            this.name = name;
            this.age = age;
        }
        function Dog(name,age) {
            this.name = name;
            this.age = age;
        }
        var obj1 = new Person("张三",20);
        var obj2 = new Dog("旺财",1);
     console.log(obj1 instanceof Person);       //true
        console.log(obj2 instanceof Person);       //false
        console.log(obj1 instanceof Dog);          //false
        console.log(obj2 instanceof Dog);       //true
    
    • 构造函数注意事项
    • 1.在使用构造函数的时候必须加上new 如果不加上new 那么可能会出错,内部就不会创建新的对象,内部的this指向的是window。
    • 2 this : 如果使用new调用构造函数,那么this指向的是新创建的对象。如果普通调用,this指向的是window。

    再次强调什么是原型对象

    • 什么是原型对象
    • 每个构造函数默认都有一个和它相关联(<->)的对象,这个对象被称为构造函数的原型对象。
      构造函数找原型对象:prototype
      原型对象找构造函数:constructor
      这个原型对象本身是一个对象,这个对象是Object类型,有一个构造器属性(constructor)
    • 原型对象的特点
      构造函数的原型对象上面的属性和方法会被该构造函数创建的所有对象共享
    • 如何访问原型对象
    构造函数.prototype
    对象.__proto__
    Object.getPrototypeOf(对象)
    
    • 如何使用原型对象
      利用对象的动态特性
      使用字面量的方式来直接替换
    • 原型对象-构造函数-对象
    • 实例化:使用构造函数创建对象的过程
    • 实例(对象):
      使用构造函数创建出来的对象被称为该构造函数的一个实例对象。
    • 注意点:我们在说实例对象的时候,需要指明构造函数
      例如:某个对象是哪个构造函数的实例对象
    • 实例成员:实例对象上面的属性和方法
      原型成员:构造函数原型对象上面的属性和方法
    • hasOwnProperty
    • 作用:是否拥有指定的实例属性(不包含原型成员)
    • 使用方法:对象.hasOwnProperty("实例属性")
    • in关键字
    • 检查对象中是否存在某个指定的属性(实例成员 + 原型成员)
    • 使用方法:"实例成员或原型成员" in 对象
    • delete关键字
    • 作用:删除对象中的属性
    • 使用方法:delete 对象.属性
    • 注意:
      删除没有使用var声明的变量
    通常情况下,声明变量需要使用var关键字,默认所有的全局变量都会成为window的属性
    特殊情况下,不适用var直接赋值也能声明一个变量 ,默认会成为一个全局的变量
    

    使用var声明的全局变量可以被删除吗? 不可以
    直接添加在window上面的属性可以被删除吗? 可以

    • 例子:
     function Person(name) {
            this.name = name;
        }
        Person.prototype.hi = "hi";
        var p1 = new Person();
    语法 对象.hasOwnProperty("属性")
        console.log(p1.hasOwnProperty("name")); //true
        console.log(p1.hasOwnProperty("age"));  //false
        console.log(p1.hasOwnProperty("hi"));   //false
    语法 “属性” in 对象
        console.log("name" in p1);           //true
        console.log("age" in p1);            //false
        console.log("hi" in p1);              //true
    
    • isPrototypeOf
    • 作用:判断是否是原型对象。
    • 使用方法: isPrototypeOf(对象)
    • 构造器属性(constructor)
    • 对象的constructor是原型对象上面的constructor属性,对象本身并没有这个属性
    • 构造函数的原型对象(相互关联),原型对象通过constructor属性(自己的)来关联构造函数
    • 原型对象上面有两个构造器属性(自己的 + 原型的)
    • Object.create()
    • 作用:创建对象并且设置原型对象
    • 使用方法:创建一个空的对象o,并且设置这个对象的原型对象是obj
    • 例子:var o = Object.create(obj);
    • 注意:兼容性处理(ES5)
    • Object.assign()
    • 作用:用来拷贝属性的,一次性拷贝多个对象的属性
    • 用法:Object.assign(目标对象,要拷贝属性的对象1,要拷贝属性的对象2,要拷贝属性的对象3)
    • 注意点:
      新特性有兼容性问题
      原型成员是否能够拷贝 不能(默认不会拷贝原型成员)
      使用for..in遍历拷贝对象的时候,会连同该对象的原型成员一起拷贝
    • call和apply函数(重要)
    • 来源:所有的对象方法都拥有这两个函数(方法),这两个方法写在Function.prototype上面
    • 作用:借用其他对象的方法
    • 用法:
      对象1.方法.call(借用者对象,参数1,参数2,参数3...)
      对象1.方法.apply(借用者对象,[参数1,参数2,参数3...])
    • 区别(传递参数):
      参数传递不一样
      期望的形参长度不一样:
      * 函数.length 形参的个数
      * call:length 1 期望传递一个参数
      * apply:length 2 期望传递两个参数

    相关文章

      网友评论

          本文标题:面向对象小知识

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