JavaScript 中类的实现 (js中的对象)
来源:互联网 发布:当今网络强国有哪些 编辑:程序博客网 时间:2024/06/08 02:11
原文地址:http://blog.chinaunix.net/uid-15223977-id-2774362.html
在js中利用new、this和prototype三个关键字可以实现完备的面向对象特征。而创建一个新的对象new关键字是不可缺少的。
只用new创建一个最简单的对象:(1)
var t = new Object;
t.a = 'test';
t.b = function (){alert(t.a)};
t.b();
再利用new和this关键字改进:(2)
var t = new Object;
t.a = 'test'
t.b = function (){alert(this.a)};
t.b();
改进:(3)
function test()
{
this.a = 'test';
this.b = function (){alert(this.a)};
return 1;
}
var t = test();
alert(a);
b();
alert(t);
alert(t.a);
t.b();
加上new:(4)
function test()
{
this.a = 'test';
this.b = function (){alert(this.a)};
return 1;
}
var t = new test();
alert(t);
alert(t.a);
t.b();
alert(a);
b();
也可以采用函数返回值的方式建立对象:(5)
function test()
{
var t = new Object;
t.a = 'test';
t.b = function (){alert(this.a)};
return t;
}
var t1 = test();
alert(t1);
alert(t1.a);
t1.b();
var t2 = test();
t2.a = 'test2';
t2.b;
alert(Object.a);
Object.b();
但是上面的4和5的例子都有个弊端就是b方法其实只是一个函数指针,两个指针所指向的函数在调用构造函数时即时创建,并非为同一个程序实例,造成存储空间浪费。
一种改进方案是:(6)
var test_b = function (){alert(this.a)};
function test()
{
var t = new Object;
t.a = 'test';
t.b = test_b;
return t;
}
var t1 = test();
t1.b();
var t2 = test();
t2.a = 'test2';
t2.b();
除了这种方式还有一种办法做到,那就是js内置于每个对象中的对象类型原型的引用prototype属性。
用prototype属性提供对象的类的一组基本功能,对象的新实例“继承”赋予该对象原型的操作。
看示例:(7)
function test()
{
this.a = 'test';
}
test.prototype.b = function (){alert(this.a)};
test.prototype.c = new Array();
test.prototype.d = 5;
var t1 = new test();
t1.b();
var t2 = new test();
t2.a = 'test2';
t2.b();
//////
t1.c = [1,2];
alert(t1.c);
t2.c[1] = 4;
alert(t2.c);
alert(t1.c);
//////
t2.d = 6;
alert(t2.d);
alert(t1.d);
在看下js中的继承:(8)
function test()
{
this.a = 'test';
this.b = function (){alert(this.a)};
}
function subTest()
{
this.peraP = test;
this.peraP();
this.subName = 'subTest';
}
var t1 = new test();
t1.b();
var t2 = new subTest();
t2.b();
alert(t2.subName);
当类的构造函数不需要传递参数时,也可以使用原型链实现继承。
例:(9)
function test()
{
this.a = 'test';
}
test.prototype.b = function (){alert(this.a)};
function subTest()
{
this.subName = 'subTest';
}
subTest.prototype = new test;
subTest.prototype.showName = function (){alert(this.subName)};
var t1 = new test();
t1.b();
var t2 = new subTest();
t2.b();
t2.showName();
subClass.prototype = new ParentClass;
的方式覆盖子类的prototype原型,子类的新原型属性放在后面添加。附录:
new 运算符
new 运算符执行下面的任务:
1、创建一个没有成员的对象。
2、为那个对象调用构造函数,传递一个指针给新创建的对象作为 this 指针。
3、然后构造函数根据传递给它的参数初始化该对象。
this 语句
指当前对象。
this.property
必选的 property 参数指的是对象的属性。
说明
this 关键字通常在对象的构造函数中使用,用来引用对象。
对于 JScript 的客户版本,如果在其他所有对象的上下文之外使用 this,则它指的是 window 对象。
prototype 属性
返回对象类型原型的引用。
objectName.prototype
objectName 参数是对象的名称。
说明
用 prototype 属性提供对象的类的一组基本功能。对象的新实例“继承”赋予该对象原型的操作。所有 JScript 内部对象都有 prototype 属性。
- JavaScript 中类的实现 (js中的对象)
- javascript实现java的map对象,js实现new map()
- Javascript中对象继承的实现
- 浅谈Javascript中Promise对象的实现
- 浅谈Javascript中Promise对象的实现
- JavaScript中实现类似Java中的Map对象
- js开发: JavaScript 中的面向对象的初步理解
- JS 中对象equals方法的实现
- 【JavaScript】JavaScript中如何实现面向对象编程 之 类的实现
- js中对象深度克隆,以及ES6中的深度克隆的实现
- javaScript 对象~js中一切皆对象
- JavaScript中通过arguments对象实现对象的重载
- {js}JavaScript中支持面向对象的基础
- 【js与jquery】javascript中对象的理解
- 【JS】JavaScript中对象的创建与原型模式
- JavaScript JS中定义对象的几种方式
- js实现小时钟,js中Date对象的使用?
- javascript 对象的定义(JS中定义类的方式有很多种)
- 8.定制new和delete
- Java学习
- 内核配置与裁剪浅析
- Junit的简单使用
- iscroll 5 中文API
- JavaScript 中类的实现 (js中的对象)
- Android应用性能优化——学习心得
- 使用sort()函数对数组中的数字进行排序。
- 1051. 复数乘法 (15)
- jvm内存模型和内存分配
- 第一篇博客
- Linode主机搭建(三)—— L2TP协议VPN安装
- Theano深度学习(一). 概述
- android_________测绘流程