面向对象小知识2

  • Array.isArray()
  • 作用:判断某个对象是否是数组
  • 使用方法:Array.isArray(对象)
  • 返回值:布尔类型的值(true|false)
  • 注意点:兼容性问题(ES5)
  • typeof
  • 作用:用于判断数据的类型(基本数据类型 + 复杂数据类型)
  • 基本数据类型:
    字符串 string
    数字 number
    true|false boolean
    null object(!)
    undefined undefined
  • 复杂数据类型:
    对象类型 object
    函数类型 function
  • toString
  • 返回的是对当前对象的字符串描述
  • 例子:
var arr1= [1,2,3];
console.log( arr1.toString());   //1,2,3
  • Object和Function的关系
  • Object的类型是一切对象的根类型。
  • Function是Object的原型对象 Object是Function的原型对象。
  • 成员 : 属性 + 方法
  • 实例成员:
    对象自己的属性和方法(name)
  • 原型成员
    对象的原型对象上面的属性和方法(showName)
  • 静态成员
    直接把属性或者是方法写在构造函数身上。(des|showDes)
function Person() {
        this.name = "默认"   //实例成员
    }
    Person.prototype.showName = function () {       //原型成员
        console.log(this.name);
    }
    var p1 = new Person();
    Person.des = "默认的描述信息";         //静态成员
    Person.showDes = function () {          //静态成员
        console.log(this.des);
    }
    Person.showDes();

Object的静态成员

  • 1.Object.apply
  • 作用:借用其他对象的方法
  • 使用方法:对象1.方法.apply(对象2,[参数1,参数2..])
  • 2.Object.arguments
  • 作用:用来接收函数调用时候传入的实参。这是一个隐藏的参数,在函数中使用。
  • 3.Object.assign
  • 作用:拷贝属性,特点(一次性拷贝多个对象的属性)
  • 使用方法: Object.assign(目标对象,要拷贝属性的对象1,要拷贝属性的对象2...)
  • 4.Object.bind
  • 作用:绑定对象调用方法,同call和apply几乎是一样
  • 5.Object.call
  • 作用:借用其他对象的方法
  • 使用方法:对象1.方法.call(对象2,参数1,参数2..)作用:
  • 6.Object.caller
  • 作用:谁调用当前的方法,那么就指向谁
  • 7.Object.create
  • 作用:创建对象并且设置该对象的原型对象
  • 使用方法: Object.create(要设置为新对象的原型对象)
  • 8.Object.getOwnPropertyDescriptor
  • 作用: 获取对象中某个属性的描述信息(描述对象)
  • 属性的描述信息:
    01 该属性对应的值
    02 该属性是否是可枚举的enumerable 能不能用for..in 列举出来。
    03 该属性是否是可配置的configurablechul
    如果是可配置的,该属性可以被删除,并且可以被修改为不可配置的
    如果是不可配置的 该属性不可以被删除 并且不可以被修改为可配置的
    04 该属性是否是可重写的writable
    该属性是否可以被修改
  • 9.Object.getOwnPropertyDescriptors
  • 作用:获得对象中多个属性的描述信息
  • 10.Object.defineProperty
  • 作用:用来设置对象中某个属性的描述信息(对象)
  • 使用方法:Object.defineProperty(对象,属性,描述对象 )
  • 描述属性注意点:
    如果是已经存在的属性,在设置的时候,如果我们省略不写,那么默认值全部都是true
    如果是新增加一个属性,在设置的时候,如果我们省略不写,那么默认值全部都是false
  • 11.Object.getOwnPropertyNames
  • 作用:获得对象所有的实例属性名(key),返回值是一个数组。不论该属性是否是可枚举的,都可以获取
  • 使用方法:Object.getOwnPropertyNames(对象)
  • 12.Object.keys
  • 作用:获取对象所有的实例属性名(key),获取的是所有可枚举的。
  • 13.Object.getPrototypeOf
  • 作用:获取原型对象
  • 14.Object.preventExtensions|Object.isExtensible
  • 作用:禁止对象扩展(不能给对象添加属性或者是方法)
  • 15.Object.seal
  • 作用:密封对象(对象不能添加成员 + 不能删除成员)
  • 16.Object.freeze
  • 作用:冻结对象(对象不能添加成员 + 不能删除成员 + 不能修改成员)

函数的创建方式

  • 函数声明 function 名称(参数){函数体}
  • 函数表达式 var fun = function 名称(参数){函数体}
  • 命名函数表达式: var fun = function 名称(参数){函数体}
  • 匿名函数表达式:var fun = function (参数){函数体}
  • 即时函数:(function(){})()
  • 使用构造函数来创建Function
其他
  • callee
  • 作用: 指向的是函数自己,常用于递归调用中。
  • 递归:自己调用自己。要有退出(结束)条件。
  • caller
  • 作用:指向的是函数的调用者
  • 注意点:window来调用函数的时候,指向的是null而不是window
  • with
  • 作用:可以缩减代码
  • 使用方法:with(对象){}
    在{}中可以通过无前缀的方式来操作对象的成员
  • 注意点:
    1 this的指向->window
    2 在{}中不能使用没有前缀的方式来添加成员,如果要添加成员必须要使用前缀
    3 会破坏js代码的词法作用域,性能降低
    4 严格模式下已经被禁止
    闭包也可以解决with能解决的问题
var div = document.getElementById("demo");
  (function (t) {
        t.height = "100px";
        t.width = "200px";
        t.backgroundColor = "red";
    })(div.style)
  • 私有变量和函数(私有成员)
    在构造函数内部声明的变量或者是函数,共函数内部使用,在外部无法访问。
  • 特权方法:
    对象的方法 + 可以访问私有的变量
function Car(type,number) {
        this.type = type;   //公共的属性
        this.number = number;
        var city = "广州";                //私有变量
        var getNumber = function () {       //私有函数
            return number;
        };
        var getType = function () {
            return type;
        };

        //能够访问私有变量和函数的方法 --- 特权方法
        this.getDescription = function () {
            console.log(getNumber() + getType() + city);
        }
    }

    var car = new Car("汽车","201718");
    car.getDescription();
  • this指向的是一个对象
    说明 函数的调用方式会影响到函数内部this的指向
    001 对象.方法 以对象的方法来进行调用 this->对象本身
    002 以普通函数方式进行调用 this->window(非严格模式)
    003 以构造函数的方式来调用 this->新创建的对象
    004 函数上下文call|apply this->绑定的第一个参数

你可能感兴趣的:(面向对象小知识2)