JavaScript的原型和原型链及项目实战

本文详细介绍了JavaScript中的原型和原型链的概念,包括函数的prototype属性、原型对象的创建和原型链的形成。通过实例展示了如何使用原型来实现对象的方法共享,并探讨了原型链在实现继承中的作用。此外,文章还提到了在道路救援项目中应用原型概念的实际案例,展示了如何利用原型简化案件日志记录的开发工作。
摘要由CSDN通过智能技术生成

1.基本概念

1.1 原型

每一个函数都有一个prototype(原型)属性,这个属性是一个指针,指向了一个对象,而这个对象用途是包含该类的所有势力共享属性和方法。

 

不用原型的方式:

// 小数点,税率

var decimalDigits = 2,

tax = 5;

function add(x, y) {

    return x + y;

}

function subtract(x, y) {

    return x - y;

}

//alert(add(1, 3));

 

 

第一种方式

var Calculator = function (decimalDigits, tax) {

    this.decimalDigits = decimalDigits;

    this.tax = tax;

};

 

Calculator.prototype = {

    add: function (x, y) {

        return x + y;

    },

 

    subtract: function (x, y) {

        return x - y;

    }

};

//alert((new Calculator()).add(1, 3));

 

第二种方式:

 

Calculator.prototype =function() { } ();

Calculator.prototype = function () {

    add = function (x, y) {

        return x + y;

    },

 

    subtract = function (x, y) {

        return x - y;

    }

    return {

        add: add,

        subtract: subtract

    }

} ();

 

//alert((new Calculator()).add(11, 3));

 

 

当然我们也可以分步声明

var BaseCalculator = function () {

    //为每个实例都声明一个小数位数

    this.decimalDigits = 2;

};

        

//使用原型给BaseCalculator扩展2个对象方法

BaseCalculator.prototype.add = function (x, y) {

    return x + y;

};

 

BaseCalculator.prototype.subtract = function (x, y) {

    return x - y;

};

 

1.2原型链

 

ECMAScript中描述了原型链的概念,并将原型链作为实现继承的主要方法。其基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法。简单回顾一下构造函数、原型和实例的关系:每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实际都包含一个指向原型对象的内部指针。那么假如我们让原型对象等于另一个类型的实例,结果会怎么样那?显然,此时的原型对象将包含一个指向另一个原型的指针,相应地,另一个原型中也包含着一个指向另一个构造函数的指针。假如另一个原型又是另一个类型的实例,那么上述关系依然成立,如此层层递进,就构成了实例与原型的链条。这就是所谓原型链的基本概念。

 

function SuperType(){ 

  this.property=true;

}

SuperType.prototype.getSuperValue=function(){ 

  return this.property;

};

function SubType(){ 

  this.subproperty=false;

}

SubType.prototype=newSuperType();

SubType.prototype.getSubValue=function(){ 

  return this.subproperty;

};

var instance =new SubType();

alert(instance.getSuperValue());//true

 

2.项目实战

在道路救援项目中,当操作员每一次进行一步操作,都要记录在案件日志表里面,用来让管理员清晰的看到每一步操作的操作流程,为了不重复开发,需要做一个案件记录的工具JSCaseLogUtil.js

 

 

 

其中,当我们要调用这个方法的时候,直接实例化CaseLog, 调用它的log方法即可。

示例:var test = new CaseLog("11", "内容");

      test.log();

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值