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

2018-10-12 admin

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

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处。

转载请注明:文章转载自 JavaScript中文网 [https://www.javascriptcn.com]

本文地址:https://www.javascriptcn.com/read-42535.html

文章标题:解释JS中的静态方法、公有方法、私有方法和特权方法

相关文章
JavaScript实现PC手机端和嵌入式滑动拼图验证码三种效果
PC和手机端网站滑动拼图验证码效果源码,同时包涵了弹出式Demo,使用ajax形式提交二次验证码所需的验证结果值,嵌入式Demo,使用表单形式提交二次验证所需的验证结果值,移动端手动实现弹出式Demo三种效果 首先要确认前端使用页面,比如...
2017-03-17
React.js编程思想
JavaScript框架层出不穷,在很多程序员看来,React.js是创建大型、快速的Web应用的最好方式。这一款由Facebook出品的JS框架,无论是在Facebook还是在Instagram中,它的表现都非常出色。 使用React.j...
2015-11-12
Vue获取DOM元素样式和样式更改示例
在 vue 中用 document 获取 dom 节点进行节点样式更改的时候有可能会出现 ‘style’ is not definde的错误,这时候可以在 mounted 里用 $refs 来获取样式,并进行更改: <template...
2017-03-13
Vue.js组件tab实现选项卡切换
本文实例为大家分享了vue插件tab选项卡的具体代码,供大家参考,具体内容如下 效果图: 代码如下: <!DOCTYPE html> <html lang="en"> <head> ...
2017-03-13
从2014年的发展来展望JS的未来将会如何
<font face="寰�杞�闆呴粦, Arial, sans-serif ">2014骞达紝杞�浠惰�屼笟鍙戝睍杩呴€燂紝鍚勭�嶈��瑷€灞傚嚭涓嶇┓锛屼互婊¤冻鐢ㄦ埛涓嶆柇鍙樺寲鐨勯渶姹傘€傝繖浜涜��...
2015-11-12
JavaScript教程:JS中的原型
Keith Peters 几年前发表的一篇博文,关于学习没有“new”的世界,其中解释了使用原型继承代替构造函数。两者都是纯粹的原型编码。 标准方法(The Standard Way) 一直以来,我们学习的在 JavaScript 里创建对...
2015-11-12
three.js实现围绕某物体旋转
话不多说,请看代码: 可以拖动右上角观察变化 <!DOCTYPE html> <html lang="en" style="width: 100%; height:100%;"&gt...
2017-02-17
NodeJS参考手册pdf版
下载地址:Nodejs参考手册PDF版下载 ...
2015-11-12
Node.js学习(1)----HTTP服务器与客户端
Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端。http.Server 是一个基于事件的 HTTP 服务器,它的核心由 Node.js 下层 C++部分实现,而接口由 Jav...
2015-11-12
typeof、instanceof和contructor的区别
typeof:以字符串的形式返回变量的原始类型,typeof在两种情况下会返回"undefined":一个变量没有被声明的时候,和一个变量的值是undefined的时候,注意,typeof null也会返回object,...
2015-11-12
回到顶部