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

推荐阅读更多精彩内容

  • 工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。简单...
    舟渔行舟阅读 7,711评论 2 17
  • 03. 没有必然的事情,只有可能的事情。世上没有巧合,只有巧合的假像。如果一起吃饭,你会坐我对面还是身边? 认识一...
    仲虺阅读 239评论 0 2
  • 我在农村里面上班,靠近县城。每天上下班都是从家里骑电动车到公司。只要在家里附近工作的人基本都是自己骑一辆电动...
    随心127阅读 1,188评论 0 1
  • 一首诗(三十九) 晴 因为无云 桥 船舶 还有河畔 水 缓缓淌着 淌向远方 随着 日光偏移 船 渐渐地 远了 还有...
    碎尘啊阅读 223评论 0 0
  • 大一暑假的时候,在家偶然看到西班牙的一部电视剧《超能家庭》(西班语剧名忘记怎么写了,百度中…)找到了《los...
    宴之鳌者阅读 942评论 14 11