js原型(2)

来源:互联网 发布:图像拼接算法apap 编辑:程序博客网 时间:2024/06/13 08:07

上一篇文章说了,js原型的访问,以及怎么增加他的效率的问题,现在讲讲怎么定义自己的原型上的方法属性。
先来说一些预备知识。js是基于原型链的,和其他语言的继承不一样,所以js有其类似于继承的独特代码,下面看一些例子:
我们以前这样写:

var decimalDigits = 2,        tax = 5;    function add(x, y) {        return x + y;    }    function subtract(x, y) {        return x - y;    }

有了原型之后,我们可以这样写:

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;        }    };

还可以用另外一种方式:

     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    }} ();
```这里写代码片

还有一种是分步声明:

//分步声明        var BaseCalculator = function  () {            //为每个示例都声明一个小数位数            this.decimalDigits = 2;        }        //使用原型给BaseCalculator声明两个方法        BaseCalculator.prototype.add = function  (x,y) {            return x+y;        }        BaseCalculator.prototype.sub = function  (x,y) {            return x-y;        }        var Calculator = function  () {            //为每个实例都声明一个税收数字            this.tax = 5;        };        Calculator.prototype = new BaseCalculator();

这里把计算的给原型链是让每个创建的实例都拥有这两个add和sub方法。

重写原型:

     //覆盖前面Calculator的add() function    Calculator.prototype.add = function (x, y) {        return x + y + this.tax;    };    var calc = new Calculator();    alert(calc.add(1, 1));

hasOwnProperty函数

这个函数可以检测你的对象上有没有自己定义的属性,而不是原型链上的属性,

/ 修改Object.prototype    Object.prototype.bar = 1;    var foo = {goo: undefined};    foo.bar; // 1    'bar' in foo; // true    foo.hasOwnProperty('bar'); // false    foo.hasOwnProperty('goo'); // true

使用hasOwnProperty可以判断到底有没有自己定义的属性,不要做什么假设。

0 0