对象
每个对象的创建都基于引用类型,比如:
<script>
var str = new String("beckham");
</script>
我们可以创建自定义对象,最简单的方法就是创建一个Object的实例,比如:
<script>
var person = new Person();
person.name = "Nicholas";
person.age = 29;
person.callName = function(){
alert(this.name);
}
</script>
上面的例子创建了名为person的对象,并添加了3个属性。
创建对象和构造函数
1.创建对象有多种方法,上述的一种,属于Object构造函数。
2.此外,还可以用字面量对象创建一个函数,如下:
<script>
var person = {
name : "Nicholas",
age : 29,
callName : function(){
alert(this.name);
}
};
alert(person.name); //"Nicholas"
</script>
3.蓝后,是第三种,用工厂模式 创建,如下:
<script>
function person(name,age,callName){
var o = new Object();
o.name=name;
o.age=31;
o.callName=function()
{
alert(this.name);
};
return o;
}
var person1 = person("Nicholas",29);
</script>
person()函数会根据接收的参数创建一个包含所有信息的对象。但是这种方法由于没有解决对象识别的问题(直到对象的类型),并不好~
接下来的一种方法就是下面重点介绍的:自定义构造函数。
自定义构造函数
与上述的构造函数不同,用Object、Array之类的构造函数被称为原生构造函数。自定义构造函数可以自定义对象的属性和方法。构造函数就是初始化一个实例对象。
让我们来看一个栗子~
<script>
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=function()
{
alert(this.name);
};
}
var person1 = new Person("Nicholas",29,"engineer");
alert(person1.name); //"Nicholas"
</script>
注意~构造函数有一个特点,默认函数首字母大写。在上面的栗子中,person1就是Person对象的一个实例。person1有一个constructor的属性,指向Person
prototype和原型对象
我们创建的每一个函数都有一个prototype属性,这个属性是一个指针,指向一个对象,这个对象包含了由特定类型所有实例共享的属性和方法。我们可以说Person.prototype是person1的原型对象。所以,Person.prototype更像是一个模型和中转站。让我们看下面的栗子:
<script>
function Person(){};
person.prototype.name = "Nicholas";
person.prototype.age = 29;
person.prototype.job = "engineer";
person.prototype.callName = function(){
alert(this.name);
};
var person1 = new Person();
person1.callName(); //"Nicholas"
</script>
如上,我们将callName()方法和所有的属性添加到了Person的prototype属性中。Person.prototype是一个第三者,Person和person1实际上是没有链接的,他们两者的联系是通过Person.prototype来建立的,而它里面会保存包括name、age、job等属性和callName()方法。或许通过下面这个图更好理解。
更简单的原型语法
我们可能会觉得每次都要写一遍Person.prototype会比较麻烦,所以我们可以用字面量的方式:
<script>
function Person(){};
Person.prototype = {
name : "Nicholas",
age : 29,
job : "engineer",
sayName : function(){
alert(this.name);
}
};
var person1 = new Person();
</script>
上面的代码最终的执行结果也是一样的,只是一点不同:constructor不再指向Person了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。