JS面向对象基础
以往写代码仅仅是为了实现特定的功能,后期维护或别人重用的时候,困难很大。
Javascript作为完全面向对象的语言,要写出最优的代码,需要理解对象是如何工作的。
1.
对象是javascript的基础,对象是一系列属性的集合,类似其他语言的散列表。
如下两个创建对象,并实现属性的例子是相同的。
var obj = new Object();
//给对象Obj设置一系列的属性
obj.name = "rxm";
obj.getAge = function()
{ return (new Date()).getFullYear() - 1986; };
//---------------------------------------
//结合键值对来重写对象
var obj = {
name: "rxm",
getAge: function() { return (new Date()).getFullYear() - 1986; }
};
2.
Javascript中,对象本身可以用来创建新对象,对象也可以继承自其他对象,这称为“原型化继承”。
<script
language="javascript"
type="text/javascript">
function User(name) {
this.name = name;
}
var my =
new User("rxm");
var you =
new my.constructor("cwr");
alert(my.name == "rxm");
//true
alert(typeof my ==
typeof you); //true
User("bj");
//对象上下文未设定,默认为window.
alert(window.name); //bj
</script>
1)公共方法
要实现在每个实例中都用到的公共方法,需了解prototype(原型)属性,这个属性包含了一个对象,此对象可以作为所有新副本的基引用。
function User(name, age) {
this.name = name;
this.age = age;
}
User.prototype.getName = function() {
return
this.name;
}
User.prototype.getAge = function() {
return
this.age;
}
var my =
new User("rxm", 27);
alert(my.getAge()); //每个实例化的对象都可以访问prototype属性添加的属性
alert(my.getName());
2)私有方法
只能有构造函数访问的私有函数的例子:
function User(name, age) {
this.name = name;
this.age = age;
function getName() {
return
this.name;
}
}
var my =
new User("rxm", 27);
my.getName(); //调用失败[运行时错误: 对象不支持此属性或方法]
3)特权方法
指那些在处理对象私有变量的同时,允许用公共方式访问的方法。
function User(age) {
var year = (new Date()).getFullYear() - age;
this.getAge =
function() {
return year;
}
}
var my =
new User(27);
alert(my.getAge());//1986
alert(my.year);//我们无法访问对象的私有属性
动态生成代码的能力是不能小视的,能够根据运行时生成代码是十分的有用。
//创建一个新的用户对象,接收一个有许多属性的对象作为参数
function User(properties) {
//遍历每一个属性,设置读取器和设置器
for (var i
in properties) {
(function(which) {
var p = i;
which["set" + p] =
function(val) {
properties[p] = val;
}
which["get" + p] =
function() {
return properties[p];
}
}
)(this);
}
}
var user =
new User({
name:"rxm",
age:27 });
alert(user.name); //没有这么个属性
alert(user.getname()); //rxm
函数是动态生成的
alert(user.getage());//27
)静态方法,类似C# static
function Person(name) {
this.name = name;
this.getname =
function()
{ return
"my name is " + this.name; };
}
Person.mouth = 1;
var my =
new Person("rxm");
alert(my.getname());//实例的
alert(Person.mouth);//静态的
最新文章
- postgresql无法安装pldbgapi的问题
- java网络编程2
- Apache禁止目录访问的方法
- UIAlertView用法
- 17周 oj 比較大小 类模板
- thymeleaf 基本语法
- 关于ubuntu中的软件安装
- VC++学习之GDI概述
- js中点击空白区域时文本框与隐藏层的问题
- javaScript中的return,break,continue的区别
- PLSQL(1)
- JDK安装路径下的JRE与独立安装的JRE区别
- C++ opencv调用resize修改插值方式遇到的坑
- mysql 开发进阶篇系列 1 SQL优化(show status命令)
- vue-cli webpack2项目打包优化
- Freemarker进行非空处理
- javascript汇总(转)
- MvcApplication 中方法的那点事
- 在项目引用里添加上对Microsoft Word 11.0 object library的引用
- [shell test] multiple conditions
热门文章
- phpstudy vhost 配置
- Centos7下安装numpy+matplotlib+scipy
- 在JavaScript中创建命名空间的几种写法
- Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
- curl 测试web站点的响应时间
- 【多重背包模板】poj 1014
- HTML+CSS D07 边框、div
- Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
- POJ1556 The Doors 叉积+最短路
- Listview的OnScrollListener的滑动监听实现分页加载