JS面向对象基础
对象创建
从最基本的层次上说,对象是一系列属性的集合,和其他语言里的散列表结果类似。
两个创建简单对象并设置属性的例子:
//创建一个新的Object对象
var obj=new Object();
obj.val=5;
obj.click=function()
{
alert(“hello”);
};
//这是一段等价代码,用{…}简写方式,结合键值对来定义属性
var obj={
val:5,
click:function()
{
alert(“hello”);
}
};
Javascript里任何函数都可以被实例化为一个对象。
function User(name)
{
this.name=name;
}
var me=new User(“My Name”);
alert(me.name==”My Name”);
alert(me.constructor == User);
User(“Test”);
//上下文对象没有设定,默认为全局的’window’对象
alert(window.name==”Test”);
1、公共方法
通过prototype实现添加。
function User(name,age)
{
this.name=name;
}
User.prototype.getName=funciton()
{
return this.name;
};
var user=new User(“Bob”);
alert(user.getName()==”Bob”);
2、私有方法
定义在构造函数内。
3、特权方法
方法在构造函数内定义并用一个公共属性引用它。
特权方法是动态生成的,因为它们是在运行时才添加到对象中的(在构造函数中),而不是在代码第一次编译时就已经生成的。
动态生成方法的例子:
function User(properties)
{
for(var i in properties)
{
(
function(which)
{
var p=i;
which[“get”+p]=function() //所谓的特权方法
{
return properties[p];
};
which[‘set’+p]=function(val) //所谓的特权方法
{
properties[p]=val;
};
}
)(this); //自执行函数,携带上下文信息
}
}
4、静态方法
类的方法:类名+”.”+字段,而对象的方法通过原型实现:this+”.”+字段 或 类名.prototype.字段。
原型式继承
原理是,对象的构造函数可以从其他对象中继承方法,它创建出一个原型对象后,所有其他的新对象都可以基于这个原型对象来构造。这种继承方式的特点是原型本身并不会从其他原型或构造函数中继承属性,而属性都是从实际对象那里继承过来的。
function Person(name)
{
this.name=name;
}
Person.prototype.getName=function()
{
return this.name;
};
function User(name,password)
{
this.name=name;
this.password=password;
};
User.prototype=new Person(); //原型就是一个对象
User.prototype.getPassword=function()
{
return this.password;
};