`
妖术在烧纸
  • 浏览: 9963 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

面向对象与原型

阅读更多
看书看了很久的js面向对象也不明白,和java的面向对象差别太大,看书看得异常头疼。今天还是去翻了个视频出来看看才大概清楚了点,一一道来:
1、创建对象:
var box = new Object();//创建对象
box.name = "Vivian";   //添加属性
box.age = 100;
box.run = function(){ //添加方法
	return this.name + ' ' + this.age +'运行中。。。';
        //这里的this也可以用box,box == this,但在这个方法的外面就不能用this表示,放在外面this代表window,如果在方法外alert(this.name)就会打印出空。
}

alert(box.run());//调用方法一定要用();


2、当你要创建多个对象,但是这多个对象中的属性却只有名字不同,那这样实例化多个对象就会产生非常多重复的问题,由此我们来了解一下工厂模式:
function createBox(name,age){//将你需要的属性放到传进去
	var obj = new Object();   //创建对象
	obj.name = name;				
	obj.age = age;				//添加属性
	obj.run = function(){		//添加方法
		return this.name + this.age + '运行中...';
	};
	return obj;   //这里必须返回对象引用,不然外面无法获得
}

var box1 = createBox('vivian',100);
var box2 = createBox('jack',100);
alert(box1.run());//打印出vivian100运行中...

但是工厂模式有个问题,就是共创模式无法判断到底谁是谁的实例
alert(box1 instanceof Object)//true
alert(box2 instanceof Object)//true

所以无法判断谁是谁的实例

3、我们采用构造函数的方式来解决判断实例的问题
//构造函数
function Box(name,age){
	this.name = name;
	this.age = age;
	this.run = function(){
		return this.name + this.age + '运行中...';
	};
};
//1、构造函数不用返回引用对象,后台会自动返回
//2、构造函数名的第一个字母须大写以体现
//3、构造函数不用new Object,因为后台会自己帮我们new一个
var box1 = new Box('vivian',100);
var box2 = new Box('jack',200);
alert(box1.run());

//这里还无法判断是否区分开来,我们再写一个构造函数来看
function Pox(name,age){
	this.name = name;
	this.age = age;
	this.run = function(){
		return this.name + this.age + '运行中...';
	};
};

var box3 = new Pox('denny',100);
alert(box3 instanceof Box);//false,这里即可看出已经区分开了


当然我们也可以用对象冒充的方法来调用构造函数
var obj = new Object();
Box.call(obj,'vivian1',200);
alert(obj.run());//vivian1200运行中...

还有一个问题就是关于实例化引用地址的问题
如果我重新实例化box1,box2并且赋值相同
var box1 = new Box('vivian',100);
var box2 = new Box('vivian',100);
那么
alert(box1.name == box2.name);//返回true
如果我调用方法
alert(box1.run())//返回vivian100运行中...
alert(box2.run())//返回vivian100运行中...
alert(box2.run== box1.run);//比较地址返回false
//在分布实例化box1和box2的时候分别都拥有了自己的内存地址,所以比较的时候是不相同的

//但是如果我希望他们的内存地址也相同这又怎么办呢?
//你只需要把函数拿出来
function Pox(name,age){
	this.name = name;
	this.age = age;
	this.run = run;
};
function run(){  //把构造函数的内部方法通过全局函数来实现引用地址的一致性
	return this.name + this.age + '运行中...';
	};

var pox1 = new Pox('vivian',100);
var pox2 = new Pox('denny',100);
alert(pox1.run());//返回vivian100运行中...
alert(pox1.run == pox2.run);//返回true,引用地址一致了。
分享到:
评论

相关推荐

    第15章 javascript面向对象与原型

    在深入讲解JavaScript面向对象与原型的知识点之前,首先需要了解JavaScript的基础知识。在JavaScript中,面向对象编程(OOP)的概念虽然存在,但是它的实现与传统基于类的语言有所不同。ECMAScript,也就是...

    JavaScript 面向对象与原型

    在JavaScript中,面向对象编程基于原型,这使得它与其他面向对象语言(如Java或C++)有所不同。以下是对JavaScript面向对象和原型机制的详细解释: 1. 面向对象的基本概念: - 类:在许多面向对象语言中,类是创建...

    简单分析javascript面向对象与原型

    3. **原型与`instanceof`操作符**: JavaScript的对象继承是基于原型链的。每个对象都有一个内部的`[[Prototype]]`属性,通常可以通过`__proto__`或`Object.getPrototypeOf()`访问。`instanceof`操作符用于检测一个...

    原型法和面向对象的分析与设计方

    原型法和面向对象的分析与设计方法 原型法是20世纪80年代中期为了快速开发系统而推出的开发模式,旨在改进传统的结构化生命周期法的不足,缩短开发周期,减少开发风险。原型法的理念是:在获取一组基本需求之后,...

    原型法和面向对象的分析与设计方法

    本文将深入探讨原型法及其在面向对象分析与设计中的应用。 原型法是一种敏捷且实用的设计策略,它通过创建一个简化的、可运行的系统模型来快速捕获用户需求和期望。这个模型可以是“丢弃型”的,即仅用于收集反馈,...

    js 面向对象实例

    面向对象编程在JavaScript中的实现主要基于以下三个概念:构造函数、原型和实例化。构造函数是一个特殊类型的函数,用于创建和初始化一个新对象。当你定义一个构造函数时,实际上是在定义一个对象类型。例如: ```...

    面向对象JavaScript精要(英文原版pdf)

    - **第七章:混合式编程**:介绍如何结合面向对象编程与其他编程范式(如函数式编程)来构建复杂的系统。 #### 五、读者对象及学习目标 本书适合有一定JavaScript基础的开发者阅读。通过本书的学习,读者可以深入...

    Javascript面向对象编程.

    4. **类(Class)**:ES6引入了类语法糖,使得JavaScript的面向对象更加符合传统面向对象语言的写法,但实际上,这些“类”仍然基于原型实现。 ```javascript class Person { constructor(name) { this.name = ...

    第16周-第16章节-Python3.5-JavaScript面向对象及原型.avi

    第16周-第16章节-Python3.5-JavaScript面向对象及原型.avi

    JavaScript面向对象编程指南.pdf

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。 《JavaScript面向对象编程指南》着重介绍...

    JavaScript面向对象编程指南

    如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。, 《JavaScript面向对象编程指南》着重介绍...

    JS面向对象经典案例

    在本文中,我们将介绍JavaScript面向对象编程中的经典案例,包括对象、类、继承、原型链和闭包等概念。 一、对象和类 在JavaScript中,对象是指一个实体,可以拥有自己的属性和方法。对象可以使用工厂函数或构造...

    面向对象分析与设计 grady著 中文版(第三版)

    根据提供的文件信息,有关《面向对象分析与设计 Grady 著 中文版(第三版)》的知识点将围绕面向对象分析与设计(Object-Oriented Analysis and Design, 简称OOAD)的主要概念进行详细说明。由于提供的部分内容重复...

    javascript面向对象编程

    JavaScript作为一门浏览器语言的核心思想;...如何实现JavaScript中缺失的面向对象特性,如对象的私有成员与私有方法;如何应用适当的编程模式,发挥JavaScript语言特有的优势;如何应用设计模式解决常见问题等。

    面向对象的软件构造.pdf

    1. **探索性编程**:面向对象的思想可以用于快速原型开发,帮助开发者快速构建和测试新想法。 2. **人工智能**:在AI领域,面向对象编程可以帮助构建智能代理和复杂的系统模型,利用类和对象来表示不同的智能体...

    面向对象JavaScript开发

    JavaScript,作为一种广泛应用...JavaScript 面向对象程序设计——继承与多态.pdf 和 JavaScript 面向对象程序设计——封装.pdf 这两个文档可能深入探讨了这些主题,帮助读者深入理解并掌握JavaScript的面向对象开发。

    面向对象技术试卷.doc

    在面向对象分析(OOA)中,主要过程包括建立用例来理解系统功能,创建类图来表示对象和它们的关系,构建辅助模型以帮助理解复杂性,制定模型规约以明确系统需求,以及通过原型开发验证模型。 综合设计题要求使用...

    C#面向对象设计模式纵横谈(视频与源码)

    C#面向对象设计模式纵横谈(1):面向对象设计模式与原则 C#面向对象设计模式纵横谈(2):Singleton 单件(创建型模式) C#面向对象设计模式纵横谈(3):Abstract Factory 抽象工厂模式(创建型模式) C#面向对象设计...

    JS面向对象汇总PDF

    **JS面向对象汇总PDF**是针对JavaScript编程语言中面向对象编程概念的一个综合性的学习资料,主要探讨了JavaScript如何实现面向对象编程(OOP)的设计原则和模式。在JavaScript中,面向对象编程是一种重要的编程范式...

Global site tag (gtag.js) - Google Analytics