vb6 方法‘ ’作用于对象 失败_web前端必学面向对象三大特征——封装

391cd6b883cf96177d19aca3a51d5c34.png

网络图片

面向对象是几乎所有程序员要掌握的一种思想,也是在开发中有着非常重要的应用,我们常用的编程语言比如Java,C++,C#,PhP,Python等都可以使用面向对象开发出非常强健的代码,几乎所有面向对象的语言都具备三大特性。分别是:封装、继承和多态。在JavaScript中这三种特性仍然非常重要,使用封装,继承,多态的方式可以开发出非常强健的JS代码,提升项目的性能。

我们首先来了解一下封装的相关思想。

1.1. 创建一个类

在JavaScript中创建一个类非常简单,给一个函数取名后赋值给一个变量。初始化后,所有this都会自动指向新创建的实例。

var Product = function(id,name,costPrice){

this.id = id;

this.name=name;

this.costPrice=costPrice;

}

除此之外,我们也可以使用原型方式来定义类的特性:

// 一次设置一个

Product.prototype.getName=function(){

.....

}

// 或者一次设置多个

Product.prototype={

getId:function(){

....

},

getName:function(){

....

},

constructor:Product // 还原构造器

}

定义好类之后,使用new关键字创建实例。有个最大问题是所有属性都对外公开,也就是我们的成本价,对外是透明的。

var product = new Product(1,’手机’,200);

alert(product.costPrice); // 成本价200

f3ea9e4c6c6aa4bbc2f9288219d458d8.png

网络图片

1.2. 看看封装怎么做

JavaScript提供有以下几种控制方法和属性的权限:

1. 公开级别:对外公开

2. 私有级别:类内部可以访问,对外不公开

var Product = function(id,name,costPrice){

// 公有属性

this.name=name;

// 私有属性

var _id = id;

var _costPrice=costPrice;

// 公有方法

this.show=function(){

alert(‘2019年新品:’+this.name+’,价格公道,只要:’+calculatorSalePrice());

}

// 私有方法

function calculatorSalePrice(){

return costPrice*4.5; // 一般手机利润是400%左右

}

// 特权方法(getter&setter)

this.setId=function(id){

_id = id;

}

this.getId=function(){

return _id;

}

this.setCostPrice=function(costPrice){

_costPrice = costPrice;

}

// 构造器

this.setName(name);

this.setCostPrice(costPrice);

}

我们对类再添加点特殊的内容:

// 类静态公有属性

Product.madeInChina = false;

// 类静态公有方法

Product.SALE =function(){

console.debug(‘打折了,打折了,买不了吃亏,买不了上当’);

}

// 类原型公有定义

Product.prototype ={

// 公有属性

isCellphone : true,

// 公有方法

toString : function(){

}

}

做一个输出:

var p = new Product(5, ’华为P30’, 1200);

console.debug(p.name); // 华为P30

console.debug(p._costPrice); // undeined

console.debug(p.show()); // 2019年新品华为P30,价格公道,只要:5400’

console.debug(p.madeInChina ); // undeined

console.debug(p.isCellphone ); // true

从上面可以看出,对象实例访问不了静态公有属性,但是我们可以这样访问:

console.debug(Product.madeInChina); //false

Product.SALE(); //打折了,打折了,买不了吃亏,买不了上当

3a5a50b1f878fa30d6b76b3b5bb2b91a.png

网络图片

其实静态方法在系统的类中有非常多的应用,比如大家可以了解String字符串类,有没有类似的静态方法呢,静态方法的作用是什么??

利用闭包来完成封装,也是在实战应用中经常的开发技术,关于闭包的相关概念和应用,我们在后面的文章中继续给大家分享。

如果您有其他的见解,欢迎在评论区留言,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值