专栏首页天天js面向对象思想精要

js面向对象思想精要

第一章 原始类型和引用类型

1.原始类型

1.1原始类型(5种)
包括:number,string,boolean,null,undefined;
这是一些简单的数据,保存在栈空间;

1.2.鉴别原始类型
使用typeof方法,
eg: console.log(10);//number;
特例:鉴别null时返回的是object;

2.引用类型(js中的对象)

2.1创建
 var person = {name:"zhangsan",age:26};
    console.log(person.name)//zhangsan
 var child = new Object();
    child.name = "zhangsan";
    console.log(child.name);//zhangsan
2.2对象的解除
对象在不使用时将其解除,最好的办法是在对象变量置为null,
让垃圾收集器对内存释放;
2.3添加和删除属性
2.4引用类型的鉴别
   2.4.1函数使用typeof鉴别时返回的事function,对于非函数则返回的
          object
   2.4.2使用instanceof操作符,
 eg:
       var child = new Object();
       child.name = "zhangsan";
         console.log(child instanceof Object);//true
    2.4.3 鉴别数组的方法
         a.使用instanceof操作符
         b.使用arr.isArray()
第二章 函数

1.声明

 var sum = function(a,b){
        return a+b;
    };
 function sum1(a,b){
        return a+b;
    }

2.参数

arguments对象,
函数的参数实际上保存在arguments对象;

3.重载 让一个函数具有多个标签名

eg:
 function sum(a){
        console.log(a);
    }
    function sum(){
        console.log("apple")
    }
   sum("b")//apple
使用arguments模仿重载;
eg:
  function sum(a){
        if(arguments.length===0){
            console.log("apple")
        }
        console.log(a);
    }
    sum("b")//b

4.对象的方法

4.1 this对象
4.2 改变this
方法一
call():第一个参数表示this的指向,其后的参数代表需要传入函数的参数
    eg:
   function sayName(name){
        console.log(name+":"+this.age)
    }
    var lisi = {
        age:12
    };
    var wangwu = {
        age:30
    };
    var age = 100;
    sayName.call(this,"张三");//张三:100
    sayName.call(lisi,"李四");//李四:12
    sayName.call(wangwu,"王五");//王五:30
 方法二 apply()第一个参数this指向,第二个参数表示传入函数参数数的组形
eg:
    sayName.apply(this,["张三"]);
    sayName.apply(lisi,["李四"]);
    sayName.apply(wangwu,["王五"]);
            和call()输出结果一样
 方法三  bind()
待研究
第三章 对象

1.属性操作

1.定义属性  object.name = "张三"
2.属性检测  
 方法:in操作符
    eg:
       var child = new Object();
       child.name = "zhangsan";
       console.log("name" in child)//true
3.删除属性
方法:delete object.属性;
eg: delete child.name;
    console.log(child.name);//undefined
4.属性枚举
方法一
eg:
    var person = {name:"zhangsan",age:26};
    for(key in person){
        console.log(key+":"+person[key])
    }
结果:name:zhangsan
      age:26
方法二:  Object.keys()得到可枚举属性的名字的数组
eg:
var person = {name:"zhangsan",age:26};
    console.log(Object.keys(person));//["name","age"]
5.属性类型
待补充
6.属性特征
a.[[Enumerable]]:是否可以遍历该属性
b.[[Configurable]]:是否可以配置
c.改变属性特征的方法
      Object.defineProperty()方法
eg:
     var person = {name:"zhangsan",age:26};
    Object.defineProperty(person,"name",{
        enumerable:false
    });
    console.log(person.propertyIsEnumerable("name"));//false
d.完整的定义一个数据属性
eg:
    var person ={};
    Object.defineProperty(person,"name",{
        value:"张三",
        enumerable:true,
        configurable:false,
        writable:false

    });
    console.log(person.name);//张三
    person.name = "lisi";
    console.log(person.name);//张三
e.定义多个数据属性
eg:
       var person ={};
    Object.defineProperties(person,{
        name:{
        value:"张三",
        enumerable:true,
        configurable:false,
        writable:false
        },
        age:{
            value:25,
            enumerable:true,
            configurable:true,
            writable:false
        }
    }
    );
    console.log(person.age);//25
f.获取属性特征
eg:
   var descriptor = Object.getOwnPropertyDescriptor(person,"name");
    console.log(descriptor.enumerable);//true
7.禁止修改对象
方法一:禁止扩展    Object.preventExtensions(person);
使用该方法后不能添加新的属性,可以用Object.isExtensible(person)检测是否被禁止扩展,
方法二:对象封印    Object.seal(person)
使用该方法,不能添加,也不能删除和改变,可以使用Object.isSealed(person)检测是否被封印
方法三:对象冻结   Object.freeze(person)
使用该方法不能添加,不能删除和改变,也不能写入数据,相当于一个只读的封印对象,可以使用Object.isFrozen(person)检测是否被冻结,
第四章 构造函数和原型对象
一.构造函数
function Person(name,age){
      this.name = name;
      this.age = age;
      this.sayName = function(){
            console.log(this.name)
}
}
var person1 = new person;
二.原型对象
几乎所有的函数都具有一个prototype属性,跟踪其原型对象,该属性是一个指向该实例使用的原型对象的指针,
第五章 继承
第六章 对象模式

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • String

    天天_哥
  • 数组的一些方法

    天天_哥
  • 基于cube-ui搭建移动端项目

    cube-ui 搭配 webpack 2+ 支持后编译和普通编译 2 种构建方式(默认使用后编译),使用前都需要修改应用的依赖和配置。

    天天_哥
  • 投融资汇总 | 本周(12.10-12.16)多家区块链技术公司获融资

    镁客网
  • 黑客可以利用传感器数据来破解手机密码

    南洋理工大学的Shivam Bhasin博士手持一个可以捕获传感器数据的定制软件。来源:图片由南洋理工大学提供 新加坡南洋理工大学(NTU Singapore)...

    企鹅号小编
  • 小波变换

    在知乎上看到一篇讲解小波变换的文章,感觉十分有趣。做成了PPT准备在图像工程的presentation。 原文地址:https://zhuanlan.zhi...

    一点儿也不潇洒
  • 《Learning Scrapy》(中文版)第7章 配置和管理

    我们已经学过了用Scrapy写一个抓取网络信息的简单爬虫是多么容易。通过进行设置,Scrapy还有许多用途和功能。对于许多软件框架,用设置调节系统的运行,很让人...

    SeanCheney
  • [golang][image]golang的cloud image编辑工具库cloudimageeditor开源

    虚拟机镜像的方式很多种,包括qcow2类型的文件,或者raw格式的文件,再或者远端的iscsi裸LUN等等。很多时候,我们需要提前编辑修改或者注入一些文件到镜像...

    皮振伟
  • 如何实现标准的dispose

    前面的文章我们说过,如果对象包含非托管资源那么就必须要正确的清理,现在我们就来说一下如何清理。针对非托管资源 .NET 会采用一套标准的模式来完成清理工作。也就...

    喵叔
  • 解决克隆系统网卡名字不是默认eth0的问题

    设备上有2个网卡,在设置也区别了eth0和eth1,直到设置eth0无效时才发现有了问题。 克隆后在ifconfig时候发现网卡名字eth3 或者eth4 而不...

    张琳兮

扫码关注云+社区

领取腾讯云代金券