上一篇文章说了,js原型的访问,以及怎么增加他的效率的问题,现在讲讲怎么定义自己的原型上的方法属性。
先来说一些预备知识。js是基于原型链的,和其他语言的继承不一样,所以js有其类似于继承的独特代码,下面看一些例子:
我们以前这样写:
var decimalDigits = 2,
tax = 5;
function add(x, y)
return x + y;
}
function subtract(x, y)
return
有了原型之后,我们可以这样写:
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
还可以用另外一种方式:
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
这里把计算的给原型链是让每个创建的实例都拥有这两个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可以判断到底有没有自己定义的属性,不要做什么假设。