js原型(2)

上一篇文章说了,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可以判断到底有没有自己定义的属性,不要做什么假设。

你可能感兴趣的:(JavaScript,函数)