第四阶段 — jsoo

一、jsoo介绍

1、概念:jsoo称为js面向对象,又可以叫做js高级。

        oo:面向对象 — 以类为基础(java)

        oop:面向对象编程

        面向对象编程:类和对象(类是对象的抽象,对象是类的实例)

        面向对象它是一种思想,任何语言都可以用,js中也可以使用。

2、js面向对象(原型对象、实例对象)— 基于原型,只有对象没有类

        (原型对象是实例对象的抽象,实例对象是原型对象的实例

        原型对象就是模板。示例:

function prototyPlane(x,y,imgSrc,speed){
    this.x = x;
    this.y = y;
    this.imgSrc = imgSrc;
    this.speed = speed;
    this.moveDown = function(){
    
    }
    this.init = function(){
    
    }
}
let newPlane = new prototypePlane();

3、面向对象的三大特性封装、继承、多态

        封装:隐藏内部实现,暴露接口(重点)

        继承:共性

        多态:个性

拓展:面向过程 — 以函数为基础(C语言、C++)

顶层对象为Object(null)

二、创建对象的方法

        1、构造函数的方法

function test(name,age){
    //let this = new Object();
    this.name = name;
    this.age = age;
    //return this;
}
new test();

        2、工厂方法

function test(name,age){
    let obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.hi = function(){}
    return obj;
}

        3、原型

function test(){

}
test.prototype.name = xxx;
test.prototype.age = xxx;

        4、

var obj = new Object();
obj.name = "zhangsan";
obj.age = 18;
obj.sayHi = function(){

}

        5、

var obj = {    //语法糖
    name:'lisi',
    age:16,
    sayHi:function(){

    }
}

        6、重点

Object.create();    //重点
var obj = Object.create(null);    //等价于var obj = new Object()或var obj = {}
Object.create(proto,[propertiesObject])

三、引用类型(堆)与原始类型(栈)

        引用类型的拷贝默认是浅拷贝,如何让其实现深拷贝?

var arr = [123,545,34];
function change(arr2){
    arr2 = [];
}
change(arr);
console.log(arr);

        原始类型的拷贝:相当于钱的复制

        引用类型的拷贝:相当于卡的复制 

        垃圾回收机制(防止内存的溢出):没有任何变量指向它时,就会被回收。

四、__proto__属性

        __proto__属性:js语言内部实现,私有的一个属性。追溯自身来源(顶层Object.Object.__proto__是null)。

        IE浏览器中不支持__proto__属性。

        实例对象.__proto__

        prototype属性:专门提供给用户进行原型的操作。只有函数对象有这个属性。

什么是函数对象?什么是普通对象?

        函数对象:typeof对象,如果为function,就说明它是函数对象。

__proto__与prototype区别:

       1、 __proto__是一个私有属性,IE不支持;prototype是一个开发接口。

        2、__proto__是js内部用于追溯自身原型的属性,是任何对象都有的属性;prototype属性只有函数属性有。

        3、建议使用prototype属性来进行原型相关的操作。

xiaoai.__proto__ === Student.prototype    //true
xiaoai.__proto__.constrctor === Student    //true
Student.prototype.constrctor === Student    //true

五、原型链

        工作模式:从自身出发,一层一层向上找,直到找到为止。没有找到就返回undefined。

        原型对象,new出来对象两不同的对象。

        注:如果你想要继承另一个对象里定义的属性(构造函数),需要将原型只想另一个对象的示例。

        使用场景:处理日期

Date.prototype.toDoubleyongString = function(str){
    var d = new Date(str);
    var year = d.getFullYear();
}

六、对象的操作

        1、销毁对象

var obj = new Object();
obj = null;

        2、删除对象的属性

var zhangsan = {
    name:'zhangsan',
    age:18
}
delete zhangsan.age;

        3、检查某个对象是否为某个构造函数的实例

                检查的对象instanceof构造函数:返回true或false。

        4、判断某个对象是否包括某个属性:返回true或false(整个原型链上进行判断)

                in关键字,示例:

console.log("name" in zhangsan);

        5、判断是否是对象自身的属性hasOwnProperty

zhangsan.hasOwnProperty("toString")

七、作用域

        全局变量:函数外定义的变量

        局部变量:函数内定义的变量

注:全局变量都可以访问;局部变量只有定义它的函数可以访问。

变量与函数的提升

变量的定义和函数的定义,两者会提升

(浅拷贝、深拷贝、for...in、for...of、es6中数组的方法)

原理:高内聚、低耦合

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值