首页 技术 正文
技术 2022年11月8日
0 收藏 741 点赞 1,602 浏览 1703 个字

1.闭包,前面已经说过,这里不再做说明

2.封装    对于JS而言,他不像java一样存在私有,公有 ,可以让对象在一些细节方面存在差异,降低他们的耦合程度,对数据做一些约束,我们可以更容易调试,封装是面向对象的基石。那么JS既然不具备这些特性,我们就需要想办法自己去实现。我们通过代码去分析,什么是私有属性和方法,什么是特权属性和方法,什么是公有属性和方法,什么是公有静态属性和方法。

  私有属性和方法:函数有作用域,在函数内用var 关键字声明的变量在外部无法访问,私有属性和方法本质就是你希望在对象外部无法访问的变量。

  特权属性和方法:创建属性和方法时使用的this关键字,因为这些方法定义在构造器的作用域中,所以它们可以访问到私有属性和方法;只有那些需要直接访问私有成员的方法才应该被设计为特权方法。

  共有属性和方法:直接链在prototype上的属性和方法,不可以访问构造器内的私有成员,可以访问特权成员,子类会继承所有的共有方法。

  共有静态属性和方法:最好的理解方式就是把它想象成一个命名空间,实际上相当于把构造器作为命名空间来使用。

  

var package = function () {
//私有属性和方法
var name = '宗元';
var method = function () {
//...
} //特权属性和方法
this.age = 10;
this.getName = function () {
return name;
}
}//公有静态属性和方法
package._name = 'Max';
package._method = function () {
alert(package._name);
}//公有属性和方法
package.prototype = {
init:function () { },
}

3.继承  继承是所有的面向对象语言都不可缺少的一个环节,在js中继承是一个十分抽象的话题,js基本的继承方式主要是类继承(构造函数继承)和原型继承

 //声明一个父类
function Person(name) {
this.name = name;
}
Person.prototype.getName = function () {
return this.name;
} //实例化这个类
let a = new Person('ambtion');
alert(a.getName()); //声明子类
function Child(name,sex) {
Person.call(this,name);
this.sex = '女';
}
//子类的原型对象等于父类的实例
Child.prototype = new Person(); Child.prototype.constructor = Child; Child.prototype.getSex = function () {
return this.sex;
} let c = new Child('luog','male'); c.getSex();

下面看原型继承

//clone()函数用来创建新的类Person对象
3   var clone =function(obj){
4 var _f =function(){};
5   //这句是原型式继承最核心的地方,函数的原型对象为对象字面量
6   _f.prototype = obj;
7   returnnew _f;
8   }
9   //先声明一个对象字面量
10   var Person = {
11   name:'Darren',
12   getName:function(){
13   returnthis.name;
14   }
15   }
16   //不需要定义一个Person的子类,只要执行一次克隆即可
17   var Programmer = clone(Person);
18   //可以直接获得Person提供的默认值,也可以添加或者修改属性和方法
19   alert(Programmer.getName())
20   Programmer.name ='Darren2'
21   alert(Programmer.getName())
22
23   //声明子类,执行一次克隆即可
24   var Someone = clone(Programmer);

选择哪一种,就看代码风格了

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,491
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,907
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,740
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,492
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,132
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,293