资讯专栏INFORMATION COLUMN

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

wizChen / 3132人阅读

面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但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.特权方法:可以访问私有、公有属性和方法

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/98322.html

相关文章

  • 封装

    摘要:上一篇文章距离有出不多一个多月了现在好不容易有了好心情继续看书写点感悟第三章讲述的是封装像可以通过关键字来声明一个方法使得只有该对象内部的代码才能执行它在中没有这样的关键字但是可以使用闭包来创建只允许从对象内部访问的方法和属性相比于闭包走了 上一篇文章距离有出不多一个多月了,现在好不容易有了好心情,继续看书,写点感悟. 第三章讲述的是js封装,像java,可以通过private关键字来...

    Ethan815 评论0 收藏0
  • 一起学习面向对象——封装

    摘要:构造函数内部在构造函数内部通过用于指向当前对象变量添加属性或方法此处定义的属性和方法都是为对象自身所拥有每次通过类创建实例时指向的属性都会得到相应的创建私有属性只能被私有方法和特权方法访问私有方法在构造函数里声明能被私有函数特权方法访问只能 构造函数内部: tips: 在构造函数内部通过this(用于指向当前对象)变量添加属性或方法,此处定义的属性和方法都是为对象自身所拥有,每次通过类...

    Neilyo 评论0 收藏0
  • js高级程序设计-函数表达式-阅读笔记

    摘要:关于函数声明他的一个重要特征就是函数声明提升就是在执行代码之前会先读取函数声明这意味着可以把函数声明放到调用他的语句的后面将声明放到了后面关于函数表达式创建一个匿名函数然后赋值给一个变量函数体可以返回一个匿名函数返回的函数可以赋值给一个变量 关于函数声明 他的一个重要特征就是函数声明提升,就是在执行代码之前会先读取函数声明,这意味着可以把函数声明放到调用他的语句的后面 sayHi();...

    hiyang 评论0 收藏0
  • Javascript 设计模式读书笔记(二)——封装,简单的创建对象模式

    摘要:创建对象中,创建对象的基本模式有三种。因此,在设计构造函数时,需要进行慎重考虑。因此在中,这种问题被称作继承破坏封装。静态成员每个只有一份,直接通过类对象进行访问。 什么是封装 找工作时一些公司给了offer后我就想知道真正拿到手的是多少,毕竟赋税繁重。但各种税也好,五险一金也好我实在是弄不清楚,于是我就会在网上的一些税后收入计算器上进行计算,只需要填写一些基本信息,比如税前收入,所...

    lentrue 评论0 收藏0
  • 闭包:私有化变量 《JavaScript高程3》 《JavaScript忍者秘籍》

    摘要:闭包闭包的特点就是内部匿名函数可以访问外部函数作用域的变量和方法变量对象。闭包的主要表现形式就是匿名函数,但是两者并不是等价的。中是没有块级作用域的,为了在中引入块级作用域,可以使用匿名函数模拟块级作用域。 在介绍闭包之前,首先解释在随后的测试实例中会使用的assert测试函数,这个方法有别于alert()测试,有很大的改进。 assert()测试方法 #...

    selfimpr 评论0 收藏0

发表评论

0条评论

wizChen

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<