解释JS中的静态方法、公有方法、私有方法和特权方法

简介: 解释JS中的静态方法、公有方法、私有方法和特权方法

面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。

我们首选要了解封装继承多态又有如何特点


封装:


顾名思义来封装变量和函数

封装->特点:高度复用,降低冗余度,更有利于模块化编程,能够为变量函数提供更多的保护


继承:


子类获得父类的属性和方法(成员)的一种方式

继承->方式:属性拷贝(浅拷贝)、属性拷贝(深拷贝)、原型链继承、原型式继承、原型链继承、组合继承


多态:


对于同一个操作(指令),不同的对象表现出不同的反应

多态->特点:代码灵活高,适应性强


在面向对象开发中要了解js面向对象,有时会用一些属性和方法,下面我来讲一下具体的实际用法


创建构造函数


function People() {
  this.name = 'wmui'; // 公有属性
}


构造函数的特点


1.构造函数的首字母必须大写,用来区分于普通函数

2.内部使用的this对象,来指向即将要生成的实例对象

3.使用new来生成实例对象



私有属性和方法


说明:类的构造函数里定义的function,即为私有方法


function People() {
  this.name = 'wmui'; // 公有属性
  let country = '杭州';
  let showCountry = function() {
    return country;
  }
}


私有属性和方法特点


1.私有方法本身是可以访问类内部的所有属性(即私有属性和公有属性)

2.私有方法是不可以在类的外部被调用



特权方法


function People() {
  this.name = 'wmui'; // 公有属性
  this.intro = function() {
    let n = this.sayName(); // 访问公有
    let c = showCountry(); // 访问私有
    console.log(`${n}来自${c}`);
  }
}


特权方法特点



1.特权方法是可以在类的外部被调用的,

2.但是它可以访问类的私有属性,并且也是可以访问类的公有属性,可以勉强的认为它是一种特殊的公有方法。

3.但是它与上面的公有方法的声明与定义方式不同。特权方法必须在类的内部声明定义



静态属性和方法


People.type = 'customObject';
People.getType = function() {
  return 'customObject'
}


静态属性和方法



1.使用静态方法时无需实例化(即无需用new操作符)对象,便可以调用

2.对象实例不能调用对象的静态方法

3.只能调用实例自身的静态属性和方法

4.这里能定义属性是因为函数也是对象, 是 Function 的实例


公有方法



People.prototype.sayName = function() {
  return this.name;
}


公有方法特点



1.任何对象都有一个__proto__属性

2.任何方法都有一个prototype属性和___proto__属性

3.公有方法是可以在类的外部被调用的,

4.但是它不可以访问类的私有属性。

5.公有方法必须在类的内部或者外部通过类的prototype属性添加




创建实列



let p = new People();
p.name = '小羊'
p.intro(); // 小羊来自杭州


使用new操作符时,会自动创建this对象,其类型指向构造函数

用instanceof来检测对象类型,同时每个对象在创建时都自动拥有一个constructor属性,指向其构造函数(字面量形式或Object构造函数创建的对象,指向Object,自定义构造函数创建的对象则指向它的构造函数)


console.log(p instanceof === People); //true
console.log(p.constructor === People); //true


总结:


1.静态属性和方法:对象自身的属性和方法,实例无法访问

2.公有属性和方法:实例继承的属性和方法

3.私有属性和方法:对象外部无法访问的属性和方法

4.特权方法:可以访问私有、公有属性和方法

相关文章
|
3月前
|
JavaScript 前端开发 程序员
前端原生Js批量修改页面元素属性的2个方法
原生 Js 的 getElementsByClassName 和 querySelectorAll 都能获取批量的页面元素,但是它们之间有些细微的差别,稍不注意,就很容易弄错!
|
3月前
|
Web App开发 JavaScript 前端开发
如何确保 Math 对象的方法在不同的 JavaScript 环境中具有一致的精度?
【10月更文挑战第29天】通过遵循标准和最佳实践、采用固定精度计算、进行全面的测试与验证、避免隐式类型转换以及持续关注和更新等方法,可以在很大程度上确保Math对象的方法在不同的JavaScript环境中具有一致的精度,从而提高代码的可靠性和可移植性。
|
4月前
|
缓存 监控 前端开发
JavaScript 实现大文件上传的方法
【10月更文挑战第17天】通过以上步骤和方法,我们可以实现较为可靠和高效的大文件上传功能。当然,具体的实现方式还需要根据实际的应用场景和服务器要求进行调整和优化。
|
1月前
|
JavaScript 前端开发 开发者
JavaScript字符串的常用方法
在JavaScript中,字符串处理是一个非常常见的任务。JavaScript提供了丰富的字符串操作方法,使开发者能够高效地处理和操作字符串。本文将详细介绍JavaScript字符串的常用方法,并提供示例代码以便更好地理解和应用这些方法。
52 13
|
3月前
|
监控 JavaScript Java
Node.js中内存泄漏的检测方法
检测内存泄漏需要综合运用多种方法,并结合实际的应用场景和代码特点进行分析。及时发现和解决内存泄漏问题,可以提高应用的稳定性和性能,避免潜在的风险和故障。同时,不断学习和掌握内存管理的知识,也是有效预防内存泄漏的重要途径。
218 52
|
3月前
|
JavaScript 前端开发 索引
js中DOM的基础方法
【10月更文挑战第31天】这些DOM基础方法是操作网页文档结构和实现交互效果的重要工具,通过它们可以动态地改变页面的内容、样式和行为,为用户提供丰富的交互体验。
|
3月前
|
缓存 JavaScript UED
js中BOM中的方法
【10月更文挑战第31天】
|
3月前
|
缓存 JavaScript 前端开发
JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用
本文深入讲解了 JavaScript 与 DOM 交互的基础及进阶技巧,涵盖 DOM 获取、修改、创建、删除元素的方法,事件处理,性能优化及与其他前端技术的结合,助你构建动态交互的网页应用。
83 5
|
3月前
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
39 1
|
3月前
|
JavaScript 前端开发
.js方法参数argument
【10月更文挑战第26天】`arguments` 对象为JavaScript函数提供了一种灵活处理参数的方式,能够满足各种不同的参数传递和处理需求,在实际开发中具有广泛的应用价值。
73 7

热门文章

最新文章