说prototype属性之前,我们先说一说ECMAScript中的Object对象。
Object对象.:Object对象自身用处不大,但ECMAScript中的所有对象都是由这个对象继承而来,Object对象中的所有属性和方法都会出现在其他对象中。
Object对象具有下列属性:
Object | |
---|---|
constructor | 对创建对象的函数的引用(指针)。对于Object,该指针指向原始的Object()函数。 |
prototype | 对该对象的对象原型的引用。对于所有的对象,它默认返回Object对象的一个实例。 |
关于in运算符与instanceof运算符
in运算符:希望他的左操作数是一个字符串或可以转换为字符串,希望他的右操作数是一个对象。如果右操作数的对象拥有一个名为左操作数值的属性名,那么表达式返回true.(实际上就是检查右边对象有没有左边的属性(数组的索引也是))
var point= {x:1,y:3}; // 定义一个对象
"x" in point; // 返回为true;对象有一个名为x的属性
"z" in point; // 返回为false;对象没有名为z的属性
"toString" in point // 返回true,对象继承了toString方法
var arr = [1,2,3]; // 拥有三个元素的数组
"0" in arr; // true:数组包含元素0
1 in arr; // true:数字转换为字符串
3 in arr; // false:没有索引为3的元素
instanceof运算符:希望他的左操作数是一个对象,右操作数是标识对象的类,如果左侧的对象是右侧类的实例,侧返回true,不是返回false。
var da = new Data() // 初始化一个对象
da instanceof Data; // true:da是Data类创建的
daa instanceof Number; // false:daa不是Data类创建的
da instanceof Object; // true:因为所有的类都是继承自Object
delete是一元操作符,他用来删除对象属性或数组元素。
var obs = {x:"nimei",y:"hah"};
delete obs.x; // 删除属性
alert("x" in obs); // flase:属性不存在了
var arr = [1,"ni",2];
delete arr[1]; // 删除编号为1的元素
alert(1 in arr); // 编号为1的元素不存在
alert(arr.length); // 3:执行delete删除数组的长度不变
并不是所有的属性都可删除,一些内置核心和客户端属性是不能删除的,用户通过var 定义的变量是不能够被删除的,通过function定义的函数和函数的参数是不能够删除的。