对象创建:
1.
//以下三种方法创建的对象是一样的,都是一个最普通的Object对象
var object = {}
var object = new Object();
var object = Object.create(Object.prototype);
创建的对象如图:
2.
/*创建一个没有原型的空对象
*这个新建的对象很可怜,他没有任何的原型
*也就是说它连Object内置的方法都没有,不能toString(),valueOf等
*/
var object = Object.create(null);
创建的对象如图:
3.
var point = { x : 1, y : 1}
创建的对象如图:
4.
var point = Object.create({ x : 1, y : 1}); //以{x:1,y:1}为原型创建一个对象
创建的对象如图:
5.创建类:
方式一
function Person(name, sex, age){
this.name = name;
this.sex = sex;
this.age = age;
this.say = function(){
alert("My name is " + name);
}
}
方式二
var Person = {
_name : null,
_sex : null,
_age : null,
create : function(name, sex, age){
var self = Object.create(this);
self.setName(name);
self.setSex(sex);
self.setAge(age);
return self;
},
say : function(){
alert("My name is " + this.getName());
},
setName : function(name){
this._name = name;
},
getName : function(){
return this._name;
},
setSex : function(sex){
this._sex = sex;
},
getSex : function(){
return this._sex;
},
setAge : function(age){
this._age = age;
},
getAge : function(){
return this._age;
}
}
对象继承:
方式一:对象冒充(它们实质上是改变了this指针的指向)
Person父类:
function Person(name, sex, age){
this.name = name;
this.sex = sex;
this.age = age;
this.say = function(){
alert("My name is " + name);
}
}
1.Student子类(临时属性方式)
function Student(name, sex, age, stuNo){
this.temp = Person;
this.temp(name, sex, age);
delete this.temp;
this.stuNo = stuNo;
this.show = function(){
this.say();
alert("My stuNo is " + stuNo);
}
}
2.Teacher子类(call()及apply()方式)
function Teacher(name, sex, age, subject){
Person.call(this, name, sex, age); //apply()方式改成Person.apply(this,new Array(name,sex,age,subject));
this.subject = subject;
this.show = function(){
this.say();
alert("I'm a teacher");
}
}
方式二:混合方式(成员变量采用对象冒充方式,成员方法采用原型链方式)
Person父类:
function Person(name, sex, age){
this.name = name;
this.sex = sex;
this.age = age;
}
Person.prototype.say = function(){
alert("My name is " + this.name);
}
President子类:
function President(name, sex, age, university){
Person.call(this, name, sex, age); //拷贝属性(通过this调用Person函数)
this.university = university;
}
President.prototype = new Person(); //拷贝方法,原型指向实例(如果原型指向原型,则在子类中添加方法就相当于在父类中添加,如下面的show方法就会被直接添加到父类中)
//show方法的声明要写在President.prototype = new Person()后面
President.prototype.show = function(){
alert("I'm the president of " + this.university + " University");
}
测试:
var person = new Person("Janny", "female", 24);
//person.show();
person.say();
var president = new President("Same", "male", 54, "Yale");
president.show();
president.say();
方式三:其它
var Person = Object.create(null,{ //创建一个Person类
name : {value : null},
sex : {value : null},
age : {value : null},
say : {value : function(){
alert("My name is " + this.name);
}}
});
var student = Object.create(Person, { //创建一个student实例
name : {value : "Tom"},
sex : {value : "male"},
age : {value : 22}
});
student.say();
var teacher = Object.create(Person, { //创建一个teacher实例
name : {value : "Jake"},
sex : {value : "male"},
age : {value : 34},
show : {value : function(){
alert("I'm a Teacher");
}}
});
teacher.show();
teacher.say();
var Developer = Object.create(Person,{ ////创建一个Developer类
language : {value : null},
show : {value : function(){
alert("I'm a " + this.language + " programmer");
}}
});
var deve = Object.create(Developer,{ //创建一个developer实例
name : {value : "Ben"},
sex : {value : "male"},
age : {value : 28},
language : {value : "Java"}
});
deve.say();
deve.show();
var Person = Object.create(null,{
name : {value : null},
sex : {value : null},
age : {value : null},
say : {value : function(){
alert("My name is " + this.name);
}}
});
var Student = function(_name, _sex, _age){ //这样创建一个类,可以使用new创建实例,但它将不再适合拥有子类
return Object.create(Person, {
name : {value : _name},
sex : {value : _sex},
age : {value : _age},
show : {value : function(){
alert("I'm a Student");
}}
});
}
var stu = new Student("Janny", "female", 24); //new关键字创建实例效率较低
stu.say();
/*提示:JS中正确高效的创建一个对象的方法是Object.create,而非new*/
var Person = { //创建一个Person类
_name : null,
_sex : null,
_age : null,
create : function(name, sex, age){
var self = Object.create(this);
self.setName(name);
self.setSex(sex);
self.setAge(age);
return self;
},
say : function(){
alert("My name is " + this.getName());
},
setName : function(name){
this._name = name;
},
getName : function(){
return this._name;
},
setSex : function(sex){
this._sex = sex;
},
getSex : function(){
return this._sex;
},
setAge : function(age){
this._age = age;
},
getAge : function(){
return this._age;
}
}
var President = { //创建一个President类
_university : null,
create : function(name, sex, age, university){
var self = Object.create(Person, { //以Person类为原型(就像继承了Person类)
_university : {value : university},
show : {value : President.show},
setUniversity : {value : this.setUniversity},
getUniversity : {value : this.getUniversity}
});
self.setName(name);
self.setSex(sex);
self.setAge(age);
/*
Person.setName.call(self,name);
Person.setSex.call(self,sex);
Person.setAge.call(self,age);
*/
return self;
},
show : function(){
alert("I'm the president of " + this.getUniversity() + " University");
},
setUniversity : function(university){
this._university = university;
},
getUniversity : function(){
return this._university;
}
}
var pres = President.create("Same", "male", 54, "Yale");
pres.say();
pres.show();
- 大小: 2.5 KB
- 大小: 2.6 KB
- 大小: 3.5 KB
- 大小: 4.7 KB
分享到:
相关推荐
javascript创建对象、对象继承的有用方式详解_.docx
主要介绍了JavaScript中怎样创建对象和继承,需要的朋友可以参考下
JavaScript中的对象是基于原型的。原型是对象的基础,它定义并实现了一个新对象所必须包含的成员列表,并被所有同类对象实例所共享。...本文着重给大家介绍javascript创建对象、对象继承的实用方式
文章《javascript对象创建--类、继承》源码
proto 一个基于原型的继承/类库,可以轻松创建对象和继承层次结构,而不会失去 javascript 原型系统的强大功能。为什么使用原型? proto很好用——你可以使用 proto 从任何对象继承,即使它是用不同的继承库创建的!...
在JavaScript中继承是一个非常复杂的话题,比其他任何面向对象的语言中的继承都复杂得多。在大多数其他面向对象语言中,继承一个类只需使用一个关键字即可。与它们不同,在JavaScript中要想达到传承公用成员的目的,...
主要介绍了js创建对象的几种方法及继承,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
你甚至可以以键值对的方式来操作javascript中的对象,就像这样:跟这种方式创建对象的效果是一样的:显然,第二种访问方式更加方便.通常只有在并不确定我们访问的对象的属性名字的时候(比如json数据),才会使用这种...
本文实例总结了JavaScript创建对象方式。分享给大家供大家参考,具体如下: 这里主要是对《JavaScript高级程序设计》第六章(面向对象的程序设计)的总结,书上的这章至少看了4遍是有的。该章主要讲对象的创建与继承...
JavaScript 面向对象程序设计,最基础的介绍如何 创建对象, 继承,重原理上分析js,由浅入深,讲解的很清晰明白,希望能给大家的学习带来帮助
JavaScript深入之创建对象的多种方式以及优缺点 js new一个对象的过程,实现一个简单的new方法 (一)类的创建 1. 工厂模式 function createPerson(name){ //原料: var obj=new Object(); //加工: obj.name=name...
一文理清 JavaScript 中对象的创建模式与继承模式 文章目录一文理清 JavaScript 中对象的创建模式与继承模式一、前言 :1. 写作目的2. 需要具备的知识点3. 阅前声明二、JavaScript 中对象的创建模式1. ( 单例模式 ) ...
本文实例总结了JavaScript创建对象的方式。分享给大家供大家参考,具体如下: 潜意识里,JavaScript不能算是面向对象的语言,要算也只能说是趋向面向对象的一种语言,至少它不能很好的吻合面向对象最基本的三大特性...
本文将用实例讲解一下JavaScript对象创建及继承原理:JavaScript中的继承是使用原型链的机制,对象创建使用Function构造器,感兴趣的朋友可以详细了解下本文,或许可以帮助到你
函数对象和其它内部对象的关系 – 对于Function, Object, Array, Date, RegExp, Math, Error等内部对象 可使用new操作来返回一个对象实例 三、类 1. 实现 2. 公有成员,私有成员,静态成员 3. 类的继承
笔者历经多年javascript的开发,痛彻体会javascript面向对象编程的不便性,精心制作了一个类的定义与继承功能的js,实现了在javascript中对类的定义、继承、封装机制,主要功能特征包括: 一、 统一了类定义的语法...