chapter 10、JS----从入门到熟练的小白之路(持续更新....)

184 阅读2分钟

面向对象

含义:面向对象是一种编程思想,”万物皆对象“。

面向对象包含哪些呢?

  • 1、js中内置内

Number() / String() / Boolean() / Array().....都属于面向对象

  • 2、单例设计模式:
var person={//person是命名空间
    name:"lili"
}
  • 3、高级单例设计模式:
var utils=(function(){
    var num=0;
    function total(){consele.log("total")};
    function banner(){consele.log("banner")};
    return{
        total,
        banner
    }
})()
//外面可以通过utils.total()直接调用
  • 4、工厂设计模式:函数
function cat(name){
    return{
        name
    }
}
var cat1=person("八喜")
  • 5、构造函数设计模式: 函数在执行时,一旦有new,这个函数就是构造函数(类),首字母一般大写,函数返回值就成了实例
function Fn(name){
this.name=name;//this是给当前实例添加,this指的是当前实例
};
var f1=new Fn("八喜");//实例和实例之间不相等,f1不等于f2
var f2=new Fn();
  • 构造函数return问题
    • 构造函数虽然没有return 但是new的内部处理了
    • 如果return的是一个基本数据类型或者不写return,返回的就是当前这个实例
    • 如果return的是一个引用数据类型,会替换掉默认的
    • 在构造函数中要尽量避免使用return

instanceof

作用:判断某个实例是否属于某个类,返回值为布尔值

function Fn () { };
let f1 = new Fn();
console.log(f1 instanceof Fn);//true

in

作用:判断一个属性是否是一个对象的属性,无论是公有还是私有,返回值是布尔值

let obj = {
  name: "cxh"
};
console.log("name" in obj);//true
//"属性名" in obj

hasOwnProperty

判断一个对象是否有这个私有属性,返回值是个布尔值

function Fn () {
  this.name = "八喜";
};
let f1 = new Fn();
console.log(f1.hasOwnProperty("name"));//true

某个属性是否是私有的或公有的,其实不是绝对的,是相对的。

js创建值的两种方式

1、字面量

let obj={};
let str="hahaha";

2、构造函数方式

let obj=new Object();
let str=new String("hahaha");

注意:基本数据类型字面量创建,不是标准的实例,用instanceof检测返回false

原型链

!!!!在理解原型链的图前,请务必牢牢记住以下五句话!!!!!

1、所有的函数都有一个prototype属性,所有函数不包括箭头函数和对象内快捷方式的函数
2、prototype是一个对象(堆内存),它身上自带一个constructor属性,它指向当前构造函数,也就是那个类
3、所有的对象都有一个属性:__proto__,它指向所属类的原型
4、所有函数都是Function的实例
5、所有对象都属于Object的实例

注意:类就是函数,prototype和实例都是对象

image.png

原型链查找机制

先看自己私有有没有,没有就找他的原型,原型上没有继续基于__proto__向上查找,找到Object基类的原型为止,没有就无法使用,查找为undefined。