对于这个名词一直感觉模模糊糊不是很清晰,先把理解到的写一写理清思路吧。
对象成员包括属性和方法。
一个被命名的对象成员可以包含任何数据类型。既然函数也是一种对象,那么对象成员除了传统数据类型之外,还可以包含函数。
当被命名的成员引用了一个函数,该成员就被称为一个“方法”。而引用了非函数类型的成员被称为“属性”
javascript 的对象是基于原型的。可以说,原型是其他对象的基础。原型对象被所有的实例对象共享。
对象有两种成员:实例成员和原型成员。实力成员直接存在于对象实例中,而原型成员则从对象原型中继承而来。
var book ={
title:"see you again";
author: "Mis.wang" ;
}
console.log(book.toString()); // [object Object]
注意book的两个实例化成员是title 和 author , 并未定义toString() 方法,但是代码执行并未抛出错误。因为方法toString()是从book的原型对象继承来的。
你可以用hasOwnProperty()来判断对象是否包含特定的实例成员
console.log(book.hasOwnProperty("author") ) // true
console.log(book.hasOwnProperty("toString")) //false
要确定对象中是否包含特定的属性,可以使用in操作符。
console.log(book.in("author") ) // true
console.log(book.in("toString")) //true
使用in时,都会返回true,因为in不但搜索实例也会搜索原型。
原型链
对象的原型决定了实例的原型。所有对象都是对象Object的实例,并继承所有的基本方法,比如toString() 。你可以定义并使用构造函数来创建另一种类型的原型。
function book(who){
this.name = who ;
this.time = "1899";
};
book.prototype.author =function(){
console.log(this.name + "writed in " + this.time )
};
var book1 =new book("Tom Sawyer adventures");
book1.author(); // Tom Sawyer adventures writed in 1899
console.log(book1 instanceof book); // true
console.log(book1 instansof Object); //true
a instanceof B instanceof操作符来判断a是否是B的实例