- 对象是一个包含相关数据和方法的集合(通常由一些变量和函数组成,我们称之为对象里面的属性和方法)
- 创建一个对象通常先定义初始化变量
var person = {};
- 一个对象由许多的成员组成,每一个成员都拥有一个名字。每一个名字/值(name/value)对被逗号分隔开,并且名字和值之间由冒号(:)分隔,语法规则如下所示:
var objectName = {
member1Name : member1Value,
member2Name : member2Value,
member3Name : member3Value
}
- 对象里有字符串(string),数字(number),两个数组(array),两个函数(function)。
- 属性和方法既可以用点表示法也可以用方括号法来表示,后者较前者更多地用于变量的使用
- 这是一个对象
name : {
first : 'Bob',
last : 'Smith'
},
链式的再使用一次点表示法,像这样:
person.name.first
person.name.last12
- 两种方法都可以用来修改、新增、删除对象属性或方法
- 对象+this 可以限定this的作用域
原型对象概念
无论什么时候,只要创建一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象。在默认情况下,所有原型对象都会自动获得一个constructor(构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针。而通过这个构造函数,可以继续为原型对象添加其他属性和方法。创建了自定义的构造函数后,其原型对象默认只会取得 constructor 属性;至于其他方法,则都从 Object 继承而来。当调用构造函数创建一个新实例后,该实例的内部将包含一个指针(内部属性),指向构造函数的原型对象。ECMA-262第5版管这个指针叫[[Prototype]] 。脚本中没有标准的方式访问[[Prototype]],但Firefox、Safari和Chrome在每个对象上都支持一个属性proto;而在其他实现中,这个属性对脚本是完全不可见的。不过,要明确的真正重要的一点就是,这个连接存在于示例和构造函数的原型对象之间,而不是存在于实例和构造函数之间。
这段话基本概述了构造函数、原型、示例之间的关系,下图表示更清晰
其实javascript的new
关键字只不过做了五件事情。
1.创建Object
2.查找class的prototype上的所有方法、属性,复制一份给创建的Object(注意,如果prototype上有属性是function或者数组或者Object,那么只复制指针)
3.将构造函数classA内部的this指向创建的Object
4.创建的Object的proto指向class的prototype
5.执行构造函数class
Object对象属性及方法(了解)
- constructor属性
constructor属性是保存当前对象的构造函数,前面的例子中,constructor保存的就是Object方法。
var obj1 = new Object();
obj1.id = "obj1";
varobj2 = {
"id": "obj2"
};
console.log(obj1.constructor);//functionObject(){}
console.log(obj2.constructor);//functionObject(){}
**hasOwnProperty(propertyName)hasOwnProperty
方法接收一个字符串参数,该参数表示属性名称,用来判断该属性是否在当前对象实例中,而不是在对象的原型链中。我们来看看下面这个例子:
isPrototypeOf(Object)isPrototype
方法接收一个对象,用来判断当前对象是否在传入的参数对象的原型链上
propertyIsEnumerable(prototypeName)prototypeIsEnumerable
用来判断给定的属性是否可以被for..in语句给枚举出来。
toLocaleString()toLocalString
方法返回对象的字符串表示,和代码的执行环境有关。
toString()toString
用来返回对象的字符串表示。
valueOf()valueOf
方法返回对象的原始值,可能是字符串、数值或bool值等,看具体的对象。
JS对象
String对象
属性:
constructor
所建立对象的函数参考
prototype
能够为对象加入的属性和方法
length
返回字符串的字符长度
参考资料