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

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

咱们首选要了解封装继承多态又有如何特色编程

封装:顾名思义来封装变量和函数
封装->特色:高度复用,下降冗余度,更有利于模块化编程,可以为变量函数提供更多的保护
继承:子类得到父类的属性和方法(成员)的一种方式
继承->方式:属性拷贝(浅拷贝)、属性拷贝(深拷贝)、原型链继承、原型式继承、原型链继承、组合继承
多态:对于同一个操做(指令),不一样的对象表现出不一样的反应
多态->特色:代码灵活高,适应性强模块化


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

建立构造函数ui

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

构造函数的特色
1.构造函数的首字母必须大写,用来区分于普通函数
2.内部使用的this对象,来指向即将要生成的实例对象
3.使用new来生成实例对象this


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

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

  let country = '杭州';
  let showCountry = function() {
    return country;
  }
}

私有属性和方法特色
1.私有方法自己是能够访问类内部的全部属性(即私有属性和公有属性)
2.私有方法是不能够在类的外部被调用code


特权方法对象

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.特权方法:能够访问私有、公有属性和方法

相关文章
相关标签/搜索