Javascript继承
Javascript面向对象设计 - Javascript继承
对象之间发生的JavaScript继承是通过原型完成的。
JavaScript的内置继承方法称为原型链,或原型遗传。
对象实例从原型继承属性。
这是原型链:一个对象继承自它的原型,而该原型继而从其原型继承,等等。
所有对象都自动继承自Object除非另有规定。
所有对象都继承自Object.prototype。
通过对象字面量定义的任何对象的[[Prototype]]设置为Object.prototype。
var book = {
title : "JavaScript"
};
var prototype = Object.getPrototypeOf(book);
console.log(prototype === Object.prototype); // true
方法从Object.prototype继承
在过去几章中使用的几种方法是在Object.prototype上定义,因此被所有其他对象继承。
这些方法是:
描述 | 描述 |
---|---|
hasOwnProperty() | 确定是否存在具有给定名称的自有属性 |
propertyIsEnumerable() | 确定自己的属性是否是可枚举的 |
isPrototypeOf() | 确定对象是否是另一个的原型 |
valueOf() | 返回对象的值表示形式 |
toString() | 返回对象的字符串表示形式 |
这五个方法都是从Object。
的价值()
每当在对象上使用运算符时,就会调用valueOf()方法。
默认情况下,valueOf()返回对象实例。
原始包装器类型覆盖valueOf(),以便它返回一个字符串forString,布尔值的布尔值和Number的数字。
Date对象的valueOf()方法返回以毫秒为单位的历元时间。
以下代码显示如何在与比较运算符一起使用时调用valueOf()方法。
var now = new Date();
var earlier = new Date(2010, 1, 1);
console.log(now > earlier); // true
上面的代码生成以下结果。
![](https://atts.w3cschool.cn/attachments/jimg/javascript_object_oriented/VALUEOF___9E6BC90E87A7BD57A2CF.png)
toString()
上面的代码生成以下结果。...
每当JavaScript期望一个字符串时,它也会对原语值进行隐式调用。
每当JavaScript期望一个字符串时,它也会对原语值进行隐式调用。...
var book = {
title : "JavaScript"
}; /*from ww w . j a va 2 s . c o m*/
var message = "Book = " + book;
console.log(message); // "Book = [object Object]"
var book = {
title : "JavaScript",
toString : function() {
return "[Book " + this.title + "]"
}
};
var message = "Book = " + book;
console.log(message);
上面的代码生成以下结果。
![](https://atts.w3cschool.cn/attachments/jimg/javascript_object_oriented/TOSTRING___2F13D97B0CE9972C811E.png)
修改Object.prototype
默认情况下,所有对象从Object.prototype继承,因此对Object的更改会影响所有对象。
Object.prototype.add = function(value) {
return this + value; /*from w w w. j a v a2 s. c o m*/
};
var book = {
title : "Javascript"
};
console.log(book.add(5));
console.log("title".add("end"));
上面的代码生成以下结果。
![](https://atts.w3cschool.cn/attachments/jimg/javascript_object_oriented/MODIFYING_OBJECT_PROTOTYPE__186BF4B13A048F8B46B9.png)
更多建议: