1.使用[]调用对象的属性和方法


function User()
{
this.age = 21;
this.sex = "男?";
}
var user = new User();
alert(user["age"]);


2.动态添加,修改,删除对象的属性和方法
//定义类
var user = new Object(); //添加属性和方法
user.name = "cary";
user.age = 21;
user.show = function() {
alert(this.name + "年?龄?为?:?" + this.age);
}
//执行方法
user.show();
//修改属性和方法
user.name = "James";
user.show = function()
{
alert(this.name + "你?好?" );
}
//执行方法
user.show();
//删除属性和方法
user.name = "undefined";
user.show = "undefined"
//执行方法
user.show();
 
3.使用大括号{}语法创建无类型对象
var obj = {};
var user =
{
name: "cary",
age: 21,
show: function() {
alert(this.name + "年?龄?为?:?" + this.age);
}
}
user.show();
var obj = {}; 等价于
var obj = new Object();
 
4.Prototype原型对象

每个函数function也是一个对象,对应的类类型为“Function”,每个函数对象都有一个子对象prototype,表示函数的原型,所以当我们new
一个类的对象的时候prototype对象的成员都会被实例化为对象的成员。例如:
function class1()
{ }
class1.prototype.show = function() {
alert("prototye member");
} var obj = new class1();
obj.show();
5.Function函数对象详解
5.1.Function和Date,Array,String等一样都属于JavaScript的内部对象,这些对象的构造器是由JavaScript本身所定义的。上面说过函数
对象对应的类型是Function,这个和数组的对象是Array一个道理。所以也可以像new Array()一样new Function()来创建一个函数对象,而
函数对象除了使用这种方式还可以使用function关键字来创建。我们之所以不经常使用new Function()的方式来创建函数是因为一个函数一般
会有很多语句,如果我们将这些都传到new Function()的参数中会显得可读性比较差。
var functionName=new Function(p1,p2,...,pn,body)其中p1到pn为参数,body为函数体。
5.2.有名函数和无名函数
有名函数:function funcName(){}
无名函数:var funcName=function(){}
他们之间的唯一区别:就是对于有名函数他可以出现在调用之后再定义,而对于无名函数,他必须是在调用之前就已经定义好。
5.3.我们可以利用Function的prototype对象来扩展函数对象,如:
Function.prototype.show = function() {
alert("扩展方法");
}
function fun()
{ }
fun.show();
fun.show().show();
fun.show().show(); 这句的意思是调用fun.show()这个函数对象的show方法。是一个递归的调用,因为fun.show()也是一个函数。

6.传递给参数的隐含参数arguments
我们在使用函数时除了传递制定的参数,还创建了一个隐含的参数arguments,如下:
function fun(a, b) {
for (var i = 0; i < arguments.length; i++) {
alert(arguments[i]);
}
}
fun(1,2,3);
arguments还有一个属性是callee,表示对函数对象本身的引用。

7.函数的apply,call方法

他们的作用都是将函数绑定到另外一个对象上去运行,两者只是在定义参数上有区别,如下:
Function.prototype.apply(thisArg,argArray);
Function.prototype.call(thisArg[,arg1[,arg2...]]);

下面是例子,obj1的show1方法绑定到obj2后整个函数的执行环境就转移到了obj2,所以this指针也就指向了obj2,所以会显示fun2t:

function fun1() {
this.name = "fun1";
this.show1 = function(arg) {
alert(this.name + arg);
}
}
function fun2() {
this.name = "fun2";
this.show2 = function(arg) {
alert(this.name + arg);
}
} var obj1 = new fun1();
var obj2 = new fun2(); obj1.show1.apply(obj2, ["t"]);
obj1.show1.call(obj2, "t");

8.JavaScript中的类实现

8.1.命名空间:我们可以使用如下方式实现命名空间,namespace1 可以看做为命名空间。
var namespace1 = new Object();
namespace1.class1 = function() {
//对?象初始化代码
}
var obj1 = new namespace1.class1();

8.2.类成员
上面的我们已经为类添加了成员和方法,除了上面的方法我们还可以使用prototype的方式来给类添加成员,我们怎么做才是最合理的呢,首先
来看下前面的方式:
function User() {
//构造函数
}
//成员定义
User.prototype.name = "cary";
User.prototype.show = function() {
alert(this.name);
}
上面的方式我们每定义一个类成员都要去写User.prototype,我们可以重构为下面的形式:
function User() {
//构造函数
}
//成员定义
User.prototype =
{
name : "cary",
show = function()
{
alert(this.name);
}
}

8.3.私有成员

实现类的私有成员主要是利用变量的作用域,我们在构造函数中实现。

function User() {
//构造函数中定义私有成员
var name="cary";
function show()
{
alert(name);
}
//共有成员
this.setname=function()
{
name="james";
}
}
8.4.静态成员

我们可以通过给一个函数对象直接添加成员来实现静态成员,如:
function class1()
{ }
//静态属性和方法
class1.staticpr = "staticpr";
class1.staticmet = function()
{ }
//调用
class1.staticmet();
我们可以通过给函数对象所在的类Function添加成员来实现给所有的函数对象默认添加静态成员,如下:
Function.prototype.staticmet = function()
{ }
function class1()
{ }
//调用
class1.staticmet();

9.实现反射机制
使用for(...in...)方式,for中的var p来存储User对象的属性和方法,我们来判断是属性还是方法,如下:
function User() {
//构造函数
}
//成员定义
User.prototype =
{
name : "cary",
show : function()
{
alert(this.name+"Hello");
}
}
var u=new User();
for (var p in u) {
if(typeof(u[p])=="function") {
u[p]();
}
else {
alert(u[p]);
}
}
 


javascript 面向对象(转)的更多相关文章

  1. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  2. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  3. Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

    Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript ...

  4. javascript面向对象系列第四篇——选项卡的实现

    前面的话 面向对象的应用并非只是读几本书那么容易,需要有大量的工程实践做基础才能真正理解并学会使用它.本文将用面向对象的技术来制作一个简单的选项卡 图示说明 由图示结果看到,这是一个非常简单的选项卡. ...

  5. javascript面向对象系列第三篇——实现继承的3种形式

    × 目录 [1]原型继承 [2]伪类继承 [3]组合继承 前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.本文是javascript面向对象系列第三篇——实现继承的3种形式 [ ...

  6. javascript面向对象系列第一篇——构造函数和原型对象

    × 目录 [1]构造函数 [2]原型对象 [3]总结 前面的话 一般地,javascript使用构造函数和原型对象来进行面向对象编程,它们的表现与其他面向对象编程语言中的类相似又不同.本文将详细介绍如 ...

  7. Javascript面向对象(封装、继承)

    Javascript 面向对象编程(一):封装 作者:阮一峰 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程( ...

  8. 《javascript面向对象精要》读书笔记

    <javascript面向对象精要> 买这本书的原因主要是因为作者,Nicholas C. Zakas 牛X闪闪的js专家,读过js高程的应该都知道他,而这本书是他的最新力作,感觉也是js ...

  9. 【转】javascript面向对象编程

    摘要:本文本来是想自己写的,奈何花了好长时间写好之后忘记保存,还按了刷新键,一键回到解放前,索性不写了,所以本文是转载的. 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式,主要包括模块化. ...

  10. javascript面向对象(一):封装

    本文来自阮一峰 学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学 ...

随机推荐

  1. BizTalk开发系列(二十一) Mapping 扩展开发

    BizTalk Map编辑器提供了常用的功能块,比如数据库,字符串,数字计算等功能.可在设计Map时直接使用这些功能块进行扩展.除此之外对于进行复杂的Map处 理,Map 编辑器提供了扩展XSLT,扩 ...

  2. NEC学习 ---- 模块 - 带点文字链接列表

    带点文字链接列表, 实现的效果是, 调整字体大小, 点的位置不会跟着变动. HTML如下: <div class="container"> <div class= ...

  3. 程序中的@Override是什么意思

    @Override是Java5的元数据,自动加上去的一个标志,告诉你说下面这个方法是从父类/接口 继承过来的,需要你重写一次,这样就可以方便你阅读,也不怕会忘记 @Override是伪代码,表示重写( ...

  4. SQL Server执行计划的理解【转】

      要理解执行计划,怎么也得先理解,那各种各样的名词吧.鉴于自己还不是很了解.本文打算作为只写懂的,不懂的懂了才写. 在开头要先说明,第一次看执行计划要注意,SQL Server的执行计划是从右向左看 ...

  5. js串讲回顾

    注:1.xx.nextSibling.css.xxx->xx的下一个元素的css样式;2. window.opener.document.getElementById("cms&quo ...

  6. 代理传值Delegate

    代理方法中加入参数:[delegate passMeToOther:(id)self]:把自己传给别人.

  7. Mac更换Sublime Text程序图标

    更换方法: 下载.icns格式一个图标.http://www.easyicon.net/language.en/iconsearch/sublime/ 终端执行:open /Applications/ ...

  8. MySql注入科普

    默认存在的数据库: mysql 需要root权限读取 information_schema 在5以上的版本中存在 测试是否存在注入方法 假:表示查询是错误的 (MySQL 报错/返回页面与原来不同) ...

  9. 【Algorithms】归并排序(merge sort)

    几个比较常见的排序算法里头,这个我是比较生疏的一个,有一天突然被问了一个问题是,归并排序最大的特点是什么,我才想起这个算法来.下午又看不进书啦,就实现一下,记下来. 归并排序采取的是分治策略,就是先将 ...

  10. linux信号机制与python信号量

    1.信号本质 软中断信号(signal,又简称为信号)用来通知进程发生了异步事件.在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是进程间 ...