博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS定义类或函数
阅读量:5371 次
发布时间:2019-06-15

本文共 2042 字,大约阅读时间需要 6 分钟。

1、工厂模式

<script>
function createCar(){
var oCar = new Object();
oCar.color="red";
oCar.doors=4;
oCar.showColor=function(){
alert(this.color);
}
return oCar;
}
//调用
var oCar1 = createCar();
var oCar2 = createCar();
oCar1.color = "black";
oCar1.showColor();
oCar2.showColor();
</script>
使用new关键字已经深入人心,因此我们使用上面的方法去定义总感觉别扭,
并且每次调用时都去创建新的属性以及函数,功能上也不实际。
下来我们看看构造函数的形式定义类。

2、构造函数

<script>
function Car(color,doors){
this.color = color;
this.doors = doors;
this.showColor = function(){
alert(this.color);
}
}
//调用
var car1 = new Car("red",4);
var car2 = new Car("blue",4);
car1.showColor();
car2.showColor();
</script>
每次new 对象时都会创建所有的属性,包括函数的创建,也就是说多个对象完全独立,
我们定义类的目的就是为了共享方法以及数据,但是car1对象与car2对象都是各自独立的属性与函数,
最起码我们应该共享方法。这就是原型方式的优势所在。

3、原型方式

<script>
function Car(){}
Car.prototype.color="red";
Car.prototype.doors=4;
Car.prototype.drivers = new Array("Tom","Jerry");
Car.prototype.showColor=function(){
alert(this.color);
}
//调用
var car1 = new Car();
var car2 = new Car();
call.showColor();
car2.showColor();
alert(car1.drivers);
car1.drivers.push("stephen");
alert(car1.drivers); //结果:Tom,Jerry,stephen
alert(car2.drivers); //结果:Tom,Jerry,stephen
//可以用json方式简化prototype的定义:
Car.prototype =
{
color: "red",
doors: 4,
drivers: ["Tom", "Jerry",'safdad'],
showColor: function() {
alert(this.color);
}
</script>
首先这段代码的构造函数,其中没有任何代码,接下来通过对象的prototype属性添加属性定义Car对象的属性。
这种方法很好,但是问题是Car的对象指向的Array指针,Car的两个对象都指向同一个Array数组,
其中一个对象car1改变属性对象的引用(数组Array)时,另一个对象car2也同时改变,这是不允许的。
同时该问题也表现在原型不能带任何初始化参数,导致构造函数无法正常初始化。
这需要另一种方式来解决:那就是混合的构造函数/原型模式。

4、混合的构造函数、原型模式

<script>
function Car(color,doors){
this.color = color;
this.doors = doors;
this.drivers=new Array("Tom","Jerry");
}
Car.prototype.showColor=function(){
alert(this.color);
}
//调用
var car1 = new Car('red',4);
var car2 = new Car('blue',4);
car1.showColor();
car2.showColor();
alert(car1.drivers);
car1.drivers.push("stephen");
alert(car1.drivers); //结果:Tom,Jerry,stephen
alert(car2.drivers); //结果:Tom,Jerry
alert(car1 instanceof Car);
</script>

 

转载于:https://www.cnblogs.com/xiaoweigogo/p/7803230.html

你可能感兴趣的文章
Spring Cloud Stream消费失败后的处理策略(三):使用DLQ队列(RabbitMQ)
查看>>
PKUWC2018 5/6
查看>>
As-If-Serial 理解
查看>>
洛谷P1005 矩阵取数游戏
查看>>
在Silverlight中使用HierarchicalDataTemplate为TreeView实现递归树状结构
查看>>
无线通信基础(一):无线网络演进
查看>>
关于python中带下划线的变量和函数 的意义
查看>>
linux清空日志文件内容 (转)
查看>>
MySQL-EXPLAIN执行计划Extra解释
查看>>
图片点击轮播(三)-----2017-04-05
查看>>
java中new一个对象和对象=null有什么区别
查看>>
字母和数字键的键码值(keyCode)
查看>>
01_1_准备ibatis环境
查看>>
JavaScript中的BOM和DOM
查看>>
spring注入Properties
查看>>
jmeter(五)创建web测试计划
查看>>
1305: [CQOI2009]dance跳舞 - BZOJ
查看>>
jmeter多线程组间的参数传递
查看>>
hash储存机制
查看>>
OpenLayers绘制图形
查看>>