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 条评论
登录 后参与评论

相关文章

来自专栏指尖下的Android

二进制的运算

在计算机中存储字节是定长的,即我们8、16、32位等等,6的二进制位为110,但如果在8位计算机中是00000110,高位补零

27430
来自专栏PHP在线

开发中遇到一个数据库字段问题

大牛不必浪费时间了,适合初学者。 今天遇到一个问题,数据库字段问题。 有一张表存储着用户消费记录,设计表时使用的是整形,后来增加需求,需要对业务做些改动,改过之...

35960
来自专栏星汉技术

HIVE内置函数

96060
来自专栏黑泽君的专栏

java基础学习_基础语法(上)01_day02总结

=============================================================================

14330
来自专栏大数据学习笔记

Java程序设计(Java9版):第2章 数据类型与运算符(Data types and Operators)

第2章 数据类型与运算符(Data types and Operators) I think everybody in this country should ...

30750
来自专栏Jackson0714

C# 正则表达式

60550
来自专栏用户2442861的专栏

python开发_json_一种轻量级的数据交换格式

==================================================

6810
来自专栏老马说编程

(46) 剖析PriorityQueue / 计算机程序的思维逻辑

上节介绍了堆的基本概念和算法,本节我们来探讨堆在Java中的具体实现类 - PriorityQueue。 我们先从基本概念谈起,然后介绍其用法,接着分析实现代码...

22470
来自专栏JavaEdge

深入分析Java的enum

377110
来自专栏cmazxiaoma的架构师之路

Java数据结构和算法(2)--《Java数据结构和算法》第二版 Robert lafore第二章【数组】编码作业

22830

扫码关注云+社区

领取腾讯云代金券