Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
来源:互联网 发布:win8映射网络驱动器 编辑:程序博客网 时间:2024/05/16 04:16
javascript对象的创建
JavaScript中定义对象的几种方式(JavaScript中没有类的概念,只有对象):
1) 基于已有对象扩充其属性和方法:
var object = new Object();object.name = "zhangsan";object.sayName = function(name){this.name = name;alert(this.name);}object.sayName("lisi");
2)工厂方式
//工厂方式创建对象/*function createObject(){var object = new Object();object.username = "zhangsan";object.password = "123";object.get = function(){alert(this.username + ", " + this.password);}return object;}var object1 = createObject();var object2 = createObject();object1.get();
带参数的构造方法:
function createObject(username, password){var object = new Object();object.username = username;object.password = password;object.get = function(){alert(this.username + ", " + this.password);}return object;}var object1 = createObject("zhangsan", "123");object1.get();
让一个函数对象被多个对象所共享,而不是每一个对象拥有一个函数对象。
function get(){alert(this.username + ", " + this.password);}function createObject(username, password){var object = new Object();object.username = username;object.password = password;object.get = get;return object;}var object = createObject("zhangsan", "123");var object2 = createObject("lisi", "456");object.get();object2.get();
3)构造函数方式
function Person(){ //在执行第一行代码前,js引擎会为我们生成一个对象 this.username = "zhangsan"; this.password = "123"; this.getInfo = function() { alert(this.username + ", " + this.password); } //此处有一个隐藏的return语句,用于将之前生成的对象返回}var person = new Person();person.getInfo();
可以在构造对象时传递参数
function Person(username, password){this.username = username;this.password = password;this.getInfo = function(){alert(this.username + ", " + this.password);}}var person = new Person("zhangsan", "123");person.getInfo();
4)原型(“prototype”)方式
//使用原型(prototype)方式创建对象/*function Person(){}Person.prototype.username = "zhangsan";Person.prototype.password = "123";Person.prototype.getInfo = function(){alert(this.username + ", " + this.password);}var person = new Person();var person2 = new Person();person.username = "lisi";person.getInfo();person2.getInfo();*/
function Person(){}Person.prototype.username = new Array();Person.prototype.password = "123";Person.prototype.getInfo = function(){alert(this.username + ", " + this.password);}var person = new Person();var person2 = new Person();person.username.push("zhangsan");person.username.push("lisi");person.password = "456";person.getInfo();person2.getInfo();
如果使用原型方式对象,那么生成的所有对象会共享原型中的属性,这样一个对象改变了该属性也会反应到其他对象当中。
单纯使用原型方式定义对象无法在构造函数中为属性赋初值,只能在对象生成后再去改变属性值。
使用原型+构造函数方式来定义对象,对象之间的属性互不干扰,各 个对象间共享同一个方法
//使用原型+构造函数方式来定义对象function Person(){this.username = new Array();this.password = "123";}Person.prototype.getInfo = function(){alert(this.username + ", " + this.password);}var p = new Person();var p2 = new Person();p.username.push("zhangsan");p2.username.push("lisi");p.getInfo();p2.getInfo();
5)动态原型方式:在构造函数中通过标志量让所有对象共享一个方法,而每个对象拥有自己的属性。
function Person(){this.username = "zhangsan";this.password = "123";if(typeof Person.flag == "undefined"){alert("invoked");Person.prototype.getInfo = function(){alert(this.username + ", " + this.password);}Person.flag = true;}}var p = new Person();var p2 = new Person();p.getInfo();p2.getInfo();
JavaScript中的继承。
1) 对象冒充
//继承第一种方式:对象冒充function Parent(username){this.username = username;this.sayHello = function(){alert(this.username);}}function Child(username, password){//下面三行代码是最关键的代码this.method = Parent;this.method(username);delete this.method;this.password = password;this.sayWorld = function(){alert(this.password);}}var parent = new Parent("zhangsan");var child = new Child("lisi", "1234");parent.sayHello();child.sayHello();child.sayWorld();
2) call方法方式。
call方法是Function对象中的方法,因此我们定义的每个函数都拥有该方法。可以通过函数名来调用call方法,call方法的第一个参数会被传递给函数中的this,从第2个参数开始,逐一赋值给函数中的参数。
//使用call方式实现对象的继承
function Parent(username){ this.username = username;
this.sayHello = function() { alert(this.username); }}
function Child(username, password){ Parent.call(this, username);
this.password = password;
this.sayWorld = function() { alert(this.password); }}
var parent = new Parent("zhangsan");
var child = new Child("lisi", "123");
parent.sayHello();
child.sayHello();child.sayWorld();
3) apply方法方式
//使用apply方法实现对象继承function Parent(username){this.username = username;this.sayHello = function(){alert(this.username);}}function Child(username, password){Parent.apply(this, new Array(username));this.password = password;this.sayWorld = function(){alert(this.password);}}var parent = new Parent("zhangsan");var child = new Child("lisi", "123");parent.sayHello();child.sayHello();child.sayWorld();
4)原型链方式(无法给构造函数传参数)
//使用原型链(prototype chain)方式实现对象继承function Parent(){}Parent.prototype.hello = "hello";Parent.prototype.sayHello = function(){alert(this.hello);}function Child(){}Child.prototype = new Parent();Child.prototype.world = "world";Child.prototype.sayWorld = function(){alert(this.world);}var child = new Child();child.sayHello();child.sayWorld();
5)混合方式(推荐)
//使用混合方式实现对象继承(推荐)function Parent(hello){this.hello = hello;}Parent.prototype.sayHello = function(){alert(this.hello);}function Child(hello, world){Parent.call(this, hello);this.world = world;}Child.prototype = new Parent();Child.prototype.sayWorld = function(){alert(this.world);}var child = new Child("hello", "world");child.sayHello();child.sayWorld();
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- Java程序员从笨鸟到菜鸟之(二)面向对象之封装,继承,多态(上)
- java程序员从笨鸟到菜鸟之(二十九)集合之Map
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Java程序员从笨鸟到菜鸟之(三)面向对象之封装,继承,多态(下)
- Android监听组合键
- LPBYTE类型与LPSTR类型
- 静态页面打开本地EXE文件
- 中控考勤二次开发
- Silverlight之资源样式的应用(5)
- Java程序员从笨鸟到菜鸟之(二十九)javascript对象的创建和继承实现
- 用&&和||代替if..else..
- oracle 中的伪列和表
- LPSTR与LPBYTE之间的区别
- MSN2011视图优化
- Google Project Glass 的实现方法猜想
- ECMAScript 对象
- 三种状态
- 为什么我们要学习Haskell这样的编程语言