Javascript继承

2018-01-06 19:14 更新

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 

上面的代码生成以下结果。

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

上面的代码生成以下结果。

修改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"));    

上面的代码生成以下结果。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号