对象创建:
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 创建对象与对象继承的有效方法 #### 一、引言 JavaScript 是一种基于原型的语言,这使得其处理对象和继承的方式与传统的面向对象编程语言有所不同。本文将深入探讨 JavaScript 中创建对象及对象继承...
这篇博文主要探讨了JavaScript创建对象的几种常见方式,这对于理解和掌握JavaScript面向对象编程至关重要。在实际开发中,了解并灵活运用这些方法能够提高代码的可读性和可维护性。下面,我们将详细讲解标题中提到的...
总的来说,`zInherit`是JavaScript对象继承的一种实现,它利用原型链实现继承关系,使得子类可以继承和扩展父类的属性和方法。理解并熟练掌握这种继承方式,对于深入理解JavaScript的OOP特性以及编写高效的代码至关...
在JavaScript中创建对象和实现继承是开发过程中非常重要的知识点。本文将探讨JavaScript中对象的创建方式以及六种常见的继承模式,包括原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承以及寄生组合...
本文将深入探讨JavaScript创建对象的8种常见方式,帮助你更好地理解和掌握这门动态类型的编程语言。 1. **字面量(Literal)方式** 这是最简单直接的创建对象的方式,通过大括号{}来定义一个对象,然后在内部用...
继承是面向对象编程的核心概念之一,它允许我们创建一个新对象,该对象继承现有对象的属性和方法。在JavaScript中,实现继承有多种方式,每种方式都有其特点、优势和不足。本文将详细介绍六种实现JavaScript继承的...
JavaScript 的每个对象都有一个 `prototype` 属性,它指向另一个对象,该对象的属性和方法可以被当前对象继承。我们可以通过修改 `prototype` 直接添加或修改方法。例如: ```javascript function Person() {} ...
### JavaScript面向对象之常见创建对象的方式 #### 引言 JavaScript 的灵活性体现在其创建对象的多种方式上。本文将详细介绍三种常见的对象创建方法:工厂模式、构造函数模式以及原型模式,并探讨它们各自的优缺点...
### JavaScript面向对象创建对象的方式小结 #### 一、引言 在JavaScript中,面向对象编程(OOP)是一种非常重要的编程范式。它通过创建和操作对象来组织代码,提高代码的复用性和可维护性。本文将详细介绍...
- **字面量语法**:最直接的方法是使用花括号`{}`创建对象,如`var obj = {key1: value1, key2: value2};` - **构造函数**:通过`function`关键字定义构造函数,然后使用`new`关键字实例化对象,如`function MyObj...
本文将深入探讨JavaScript中的面向对象继承,这是理解JavaScript OOP的关键部分。 面向对象继承是实现代码复用和模块化的重要机制。在JavaScript中,继承主要通过原型链(Prototype Chain)实现。每个JavaScript...
通过分析这个文件,我们可以看到实际应用中的类定义和继承实践,包括如何定义类,如何使用构造函数初始化对象,以及如何通过`extends`关键字实现类的继承和覆盖或扩展父类的方法。 总结一下,JavaScript的类、对象...
以上就是JavaScript创建对象的六种常见方式,每种都有其适用场景和优缺点。理解并熟练掌握这些方法,能够帮助你编写出更加灵活、可维护的代码。在实际项目中,根据需求选择合适的方法,可以提升代码质量和效率。
在JavaScript中创建对象的各种模式对于掌握这门语言的面向对象编程特性至关重要。JavaScript作为一门具有面向对象特性的脚本语言,虽然没有传统意义上类的概念,但它通过其他方式实现了对象的创建和继承。在...
如果要让子对象继承父对象,可以将子对象构造函数的 prototype 属性指向父对象的一个实例。例如: ``` function Parent() {} function Child() {} Child.prototype = new Parent(); Child.prototype.constructor = ...
- 寄生组合式继承(组合构造函数继承和原型链继承,避免了父构造函数的重复调用) - ES6的类继承(语法糖,底层仍然是基于原型链) ### JSON JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它...
JavaScript是Web开发中不可或缺的一部分,尤其在前端领域。在JavaScript中,对象是其核心特性,因为它是基于原型的面向...在实践中,根据项目的具体需求和团队的编程风格,选择最适合的创建对象的方式是非常重要的。
继承是一种创建自定义对象的方式,它通过让一个对象继承另一个对象的属性和方法。例如: ``` function Animal(name) { this.name = name; } Animal.prototype.sayHello = function() { console.log("Hello, my ...
关于对象继承,JavaScript采用的是原型链机制。每个对象都有一个`__proto__`属性,指向它的原型。当试图访问对象的一个属性时,如果对象本身没有该属性,JavaScript会查找`__proto__`,如果`__proto__`也没有,就会...
5. **寄生组合式继承**:结合了寄生式继承和组合继承的优点,是JavaScript中推荐的继承方式,可以在`Javascript面向对象编程(三):非构造函数的继承.docx`中找到更详细的解释。 例如,使用寄生组合式继承: ```...