以往写代码仅仅是为了实现特定的功能,后期维护或别人重用的时候,困难很大。

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);//静态的

最新文章

  1. postgresql无法安装pldbgapi的问题
  2. java网络编程2
  3. Apache禁止目录访问的方法
  4. UIAlertView用法
  5. 17周 oj 比較大小 类模板
  6. thymeleaf 基本语法
  7. 关于ubuntu中的软件安装
  8. VC++学习之GDI概述
  9. js中点击空白区域时文本框与隐藏层的问题
  10. javaScript中的return,break,continue的区别
  11. PLSQL(1)
  12. JDK安装路径下的JRE与独立安装的JRE区别
  13. C++ opencv调用resize修改插值方式遇到的坑
  14. mysql 开发进阶篇系列 1 SQL优化(show status命令)
  15. vue-cli webpack2项目打包优化
  16. Freemarker进行非空处理
  17. javascript汇总(转)
  18. MvcApplication 中方法的那点事
  19. 在项目引用里添加上对Microsoft Word 11.0 object library的引用
  20. [shell test] multiple conditions

热门文章

  1. phpstudy vhost 配置
  2. Centos7下安装numpy+matplotlib+scipy
  3. 在JavaScript中创建命名空间的几种写法
  4. Nicholas C. Zakas谈怎样才能成为优秀的前端工程师
  5. curl 测试web站点的响应时间
  6. 【多重背包模板】poj 1014
  7. HTML+CSS D07 边框、div
  8. Android OpenGL ES(六)创建实例应用OpenGLDemos程序框架 .
  9. POJ1556 The Doors 叉积+最短路
  10. Listview的OnScrollListener的滑动监听实现分页加载