JavaScript 面向对象完全掌握核心原理详解(2) javascript面向对象快速入门基础

简介: JavaScript 面向对象

🚀 个人主页 极客小俊
✍🏻 作者简介:web开发者、设计师、技术分享博主
🐋 希望大家多多支持一下, 我们一起进步!😄
🏅 如果文章对你有帮助的话,欢迎评论 💬点赞👍🏻 收藏 📂加关注

第二节 javascript 面向对象基础

什么是面向对象编程?

面向对象的英文全称:==Object Oriented Programming== , 简称==OOP==

首先我们要先了解面向过程的编程思想, 就是代码从上到下都没有封装的意思,某写代码裸露在外、没有模块化、代码杂乱无章的写法. 并且还不好维护,也不便于后期二次修改

面向对象的编程思想: 通俗的说就是要具备代码好维护、代码重用性高、耦合度低、高内聚、模块化、便于修改

名词解释:

高内聚: 指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。

低耦合: 指让每个模块尽可能的独立完成某个特定的子功能。

面向对象的主要特点:

  1. 抽象:抓住核心问题, 去掉相关性不强的代码, 把类似一样的功能性代码放在一起、

    [把这个功能所需要的相同功能代码抽取出来,然后进行封装]

  2. 封装:只能通过对象来访问方法 [提高可维护性]

  3. 继承:从已有对象上继承出新的对象 [提高代码重用性]

  4. 多态:让同一个[接口] 被不同的对象所继承或者实现,从而产生不同的处理方式

js不是面向对象的语言 但是可以模拟面向对象的思想

js是一门基于对象的语言

js是一门解释型的语言

js是一门脚本语言、弱类型语言!

==分析什么是对象?==

对象:具有特征和行为或者说 有==属性==和==方法==, 具体特指的某一个事物

对象的组成

==属性== 就是变量 表示一个对象的状态 对象下面的变量就叫做:==属性==

==方法== 就是函数 表示一个对象的行为过程 对象下面的函数就叫做:==方法==

javascript创建对象的三种基本方式
1.调用系统的构造函数创建对象

创建对象也叫实例化对象, Object是系统的构造函数

//语法
var 变量名 = new Object();

如何添加对象的属性和方法

添加属性: 如何添加属性?

var 变量名 = new Object();
变量名.属性名=;

添加方法: 如何添加方法?

var 变量名 = new Object();

变量名.方法名=function(){
    
    ..代码段...
}function 函数名(){
   

}
变量名.方法名=函数名;

案例:

var obj=new Object();
obj.name='张三';
obj.age=33;
obj.city='重庆';
obj.say=function(){
   
    alert('张三说话了!');
}
console.log(obj);

==这种创建方式的缺点是:==

1.如果使用这种方式创建了多个对象、会产生对象不能分辨出到底属于哪一个类型!

2.每创建 一个对象都需要new Object() 一次 耗费内存空间、 不能一次性创建多个对象

==小知识:== 如何判断某一个对象引用变量是不是属于某一个类型?

语法: 对象引用变量名称 instanceof 类名称 返回true就是属于这个类 返回false不属于这种类型

==this关键字的基本使用==

在当前的对象方法中,可以使用this关键字代表当前对象

==小知识:== 访问对象属性和方法的另一种写法: 对象[“属性名”] 或 对象方法名

案例代码如下:

var obj2=new Object();
obj2.name='李四';
obj2.age=66;
obj2.city='北京';
obj2.say=function(){
   
    console.log('李四说话了');
    console.log(this.name);
}
console.log(obj2["name"]);
obj2["say"]();
2.工厂方式与构造函数

工厂方式也可以叫做封装函数

==优点:== 代码复用性提升、不同的数据当做参数进行传递

自定义构造函数创建对象

了解一下如何一次性创建多个对象?

工厂方法 方法1: 首先把创建对象的系统构造对象相关代码封装在一个函数中,不同的数据当做参数进行传递,然后返回创建好的对象

案例代码如下:

function createObject(username,age){
   
    var obj=new Object();
    obj.name=username;
    obj.age=age;
    obj.city='重庆';
    obj.say=function(){
   
        console.log(this.name+'的年龄是:'+this.age);
    }
    return obj;
}

var obj1=createObject('张三',23);
var obj2=createObject('李四',66);
obj1.say();
obj2.say();

工厂方法 方法2:自定义构造函数创建对象, 自己定义一个构造函数,创建对象

==优点: 可以区分出对象引用属于哪一类==

案例代码如下

//Person就是构造函数
function Person(username,age,city){
   
    this.name=username;
    this.age=age;
    this.city=city;
    this.say=function(){
   
        console.log(this.name+'的年龄是:'+this.age);
    }
}


var obj1=new Person('张三',33,'北京市');
var obj2=new Person('李四',66,'重庆市');
obj1.say();
obj2.say();

小结: 通过上面的案例可以小结出一个概念: 就是函数如果前面有new关键字,那么这个函数就是构造函数,否则就是一个普通函数

==在javascript中使用new关键字来修饰一个 普通函数的解答

系统做4件事情

  1. 首先这个函数就成为了 构造函数, 因为 new 后面跟一个函数 这样的函数就叫构造函数

  2. 在内存中开辟一块(申请一块空闲的空间)空间,存储创建的新对象

  3. 构造函数中的this就设置为当前的对象

  4. 就是说当new写在一个函数前面的时候、这个函数中的this就是创建出来的对象、并且函数的返回值直接默认就是this了 隐式返回,可以使用如下代码进行测试得出结论

    function Obj() {
         
    
    }
    //观察返回值
    console.log(Obj());       //undefined
    console.log(new Obj());   //Obj {}
    //所以this这个对象会返回, [ 这里的返回是自动的 无需在构造函数中使用return]
    
  5. 如果有设置对象的属性和方法就设置值

3.字面量的方式创建对象

json对象是创建对象的一种字面量表示形式

var 变量名 = { } //这就叫字面量方式创建对象

案例代码

var obj={
   };
obj.name='张三';
obj.age=22;
obj.city='北京市';
obj.fn=function () {
   
    console.log('我的名字叫'+this.name+' 我的年龄是:'+this.age+' 我在'+this.city+'生活和工作!');
}

obj.fn();

==推荐写法:==

字面量优化后的形式:其实就是json数据格式的形式 [推荐写法]

案例代码

var obj2={
   
    name:'张三',
    age:22,
    city:'北京市',
    fn:function () {
   
        console.log(this);
        console.log('我的名字叫'+this.name+' 我的年龄是:'+this.age+' 我在'+this.city+'生活和工作!');
    }
};

obj2.fn();

==注意==: var obj =new Object() 与 var obj = { } 是完全一样的 只是一个在内存中的堆区中开空间 而另一个在栈区开辟空间

function Obj() {
   

}
var test=new Obj();  //在内存中的堆区中开空间
console.log(test);

var json={
   }            //在栈区开辟空间 用完即释放
console.log(json);
相关文章
|
4月前
|
机器学习/深度学习 JavaScript 前端开发
JS进阶教程:递归函数原理与篇例解析
通过对这些代码示例的学习,我们已经了解了递归的原理以及递归在JS中的应用方法。递归虽然有着理论升华,但弄清它的核心思想并不难。举个随手可见的例子,火影鸣人做的影分身,你看到的都是同一个鸣人,但他们的行为却能在全局产生影响,这不就是递归吗?雾里看花,透过其间你或许已经深入了递归的魅力之中。
176 19
|
12月前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理与实战
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理与实战
|
7月前
|
JavaScript 前端开发 Java
深入理解 JavaScript 中的 Array.find() 方法:原理、性能优势与实用案例详解
Array.find() 是 JavaScript 数组方法中一个非常实用和强大的工具。它不仅提供了简洁的查找操作,还具有性能上的独特优势:返回的引用能够直接影响原数组的数据内容,使得数据更新更加高效。通过各种场景的展示,我们可以看到 Array.find() 在更新、条件查找和嵌套结构查找等场景中的广泛应用。 在实际开发中,掌握 Array.find() 的特性和使用技巧,可以让代码更加简洁高效,特别是在需要直接修改原数据内容的情形。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
7月前
|
监控 JavaScript 前端开发
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
MutationObserver 是一个非常强大的 API,提供了一种高效、灵活的方式来监听和响应 DOM 变化。它解决了传统 DOM 事件监听器的诸多局限性,通过异步、批量的方式处理 DOM 变化,大大提高了性能和效率。在实际开发中,合理使用 MutationObserver 可以帮助我们更好地控制 DOM 操作,提高代码的健壮性和可维护性。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
MutationObserver详解+案例——深入理解 JavaScript 中的 MutationObserver:原理与实战案例
|
7月前
|
JavaScript 前端开发 Java
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
柯里化是一种强大的函数式编程技术,它通过将函数分解为单参数形式,实现了灵活性与可复用性的统一。无论是参数复用、延迟执行,还是函数组合,柯里化都为现代编程提供了极大的便利。 从 Redux 的选择器优化到复杂的数据流处理,再到深度嵌套的函数优化,柯里化在实际开发中展现出了非凡的价值。如果你希望编写更简洁、更优雅的代码,柯里化无疑是一个值得深入学习和实践的工具。从简单的实现到复杂的应用,希望这篇博客能为你揭开柯里化的奥秘,助力你的开发之旅! 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一
|
11月前
|
JavaScript 前端开发 API
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
Vue.js响应式原理深度解析:从Vue 2到Vue 3的演进
285 17
|
11月前
|
监控 JavaScript 算法
深度剖析 Vue.js 响应式原理:从数据劫持到视图更新的全流程详解
本文深入解析Vue.js的响应式机制,从数据劫持到视图更新的全过程,详细讲解了其实现原理和运作流程。
|
11月前
|
缓存 前端开发 JavaScript
JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式
本文深入解析了JavaScript前端路由的实现原理及其在单页应用中的重要性,涵盖前端路由概念、基本原理、常见实现方式(Hash路由和History路由)、优点及挑战,并通过实际案例分析,帮助开发者更好地理解和应用这一关键技术,提升用户体验。
426 1
|
12月前
|
前端开发 JavaScript
深入理解JavaScript中的事件循环(Event Loop):从原理到实践
【10月更文挑战第12天】 深入理解JavaScript中的事件循环(Event Loop):从原理到实践
370 1
|
12月前
|
自然语言处理 JavaScript 前端开发
深入理解JavaScript中的闭包:原理、应用与代码演示
【10月更文挑战第12天】深入理解JavaScript中的闭包:原理、应用与代码演示

热门文章

最新文章