js中的面向对象程序设计

面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法)。

1、json格式的面向对象,一个命名空间;适合模块化开发插件。不同的模块使用不同的命名空间。也可用于小型项目的开发。

var person = {
    name : ‘My name‘,
    age : 18,
    getName : function(){
        return this.name;
    }
}

2、组合构造函数及原型模式

目前最为常用的定义类型方式,是组合构造函数模式与原型模式。构造函数模式用于定义实例的属性,而原型模式用于定义方法和共享的属性。结果,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方方法的引用,最大限度的节约内存。此外,组合模式还支持向构造函数传递参数,可谓是集两家之所长。

function Person(name, age, job) {
    this.name = name;
    this.age = age;
    this.job = job;
    this.lessons = [‘Math‘, ‘Physics‘];
}
Person.prototype = {
    constructor: Person,//原型字面量方式会将对象的constructor变为Object,此外强制指回Person
    getName: function () {
        return this.name;
    }
}
var person1 = new Person(‘Jack‘, 19, ‘SoftWare Engneer‘);
person1.lessons.push(‘Biology‘);
var person2 = new Person(‘Lily‘, 39, ‘Mechanical Engneer‘);
alert(person1.lessons);//Math,Physics,Biology
alert(person2.lessons);//Math,Physics
alert(person1.getName === person2.getName);//true,//共享原型中定义方法

原型模式的缺点是如果属性值是引用类型,那么会造成修改一个对象的这个属性,另一个对象的这个属性也变了。

构造函数模式的缺点是同一种方法每一个实例都有,而不是共享方法。不够优化。

继承

属性的继承:

function Worker(name,age,job){
    Person.call(this,name,age);    //属性的继承。
    this.job = job;
}

方法的继承:

Worker.prototype = {};
for(var i in Person.prototype){
    Worker.prototype[i] = Person.prototype[i];
}
Worker.prototype.sayJob = function(){
    alert(this.job)
}

完整的继承:

function Person(name,age){
    this.name = name;
    this.age = age;
    this.friends = [‘Shelby‘,‘Court‘];
}
Person.prototype = {
    sayName:function(){
        alert(this.name);
    }
}
function Worker(name,age,job){
    Person.call(this,name,age);    //属性的继承。
    this.job = job;
}
Worker.prototype = {};
for(var i in Person.prototype){
    Worker.prototype[i] = Person.prototype[i];
}
Worker.prototype.sayJob = function(){
    alert(this.job)
}
var w = new Worker(‘li‘,12,‘打杂的‘);
var p = new Person(‘ai‘,21);
w.sayName();
w.sayJob();
p.sayName();
p.sayJob();
时间: 2024-10-22 10:37:00

js中的面向对象程序设计的相关文章

谈谈JS中的面向对象

请先看看下面这段代 1 <script src="jquery.js"></script> 2 <script type="text/javascript"> 3 /** 4 * Object.create() 最近才添加进了ECMAScript第5版规范,有些浏览器不支持 5 * 这里模拟一个Object.create方法解决兼容性问题 6 * Object.create : 该方法只有一个参数,即原型对象,返回一个新对象 7

好程序员Java学习路线分享JS中的面向对象

好程序员Java学习路线分享JS中的面向对象,在JS中,一般情况下我们都是直接写函数,直接调用,但是发现JS中也有new关键字,那么new关键字作为创建对象的关键字,给我们的感觉就是在JS中可以定义一个类,然后用new创建对象,那么在JS中如何做呢?我们先看如下案例,下面的案例是写一个简单的喷泉效果的. window.onload = function(){ // 创建一个画布对象var canvas = document.createElement("canvas");// 设置大小

js中的面向对象

面向对象:不了解原理的情况下,会使用功能.如:电视机,不清楚原理,却知道如何操作.面向对象是一种通用的思想,并非只有在编程使用.面向对象编程简称OOP. js是一个基于原型的面向对象的编程语言,即每个对象有一个原型对象,对象从原型中继承属性和方法. js的原型的关系是递归的.即,对象的原型也是一个对象,而原型的本身可能还有一个原型. js中的对象使用一个new 运算符和一个构造函数来创建 js中可以给对象动态的添加属性和方法 js中创建对象的方法有多种,包括:原型方式,动态原型方式,工厂方式等等

《JS中的面向对象技术》

内容要点: 1.什么是对象:JS权威指南学习总结-第六章 ,(有句话:一切都是对象) 2.什么面向对象 使用对象时,只关注对象提供的功能,不关注其内部细节,比如jQuery.面向对象是一种通用思想,并非只有编程中使用,任何事情都可以用. 3.JS中面向对象三大特征: 封装.继承.多态 4.JS自定义对象(三大对象两大属性): 4.1创建对象方式:方法1:对象初始化的方法,就是通过对象直接量创建的对象.方法2:通过关键字new和构造函数的方法创建对象 4.2对象属性定义:私有属性.对象属性.类属性

PHP中关于面向对象程序设计的相关简介

PHP面向对象程序设计 面向对象的程序设计(Object Oriented Programming) 一.面向对象程序设计的概念 PHP引进的面向对象的设计方法,将数据及处理数据的相应函数"封装"到一个"类(class)"中.类的实例称为"对象".在一个对象内,只有属于该对象的函数才可以存取该对象的数据. 面向对象的程序设计有三个主要特征:封装.继承和多态. 1.封装 封装是将数据和代码捆绑到一起,避免外界的干扰和不确定性.在PHP中,封装是通过

轻松理解JS中的面向对象,顺便搞懂prototype和__proto__的原理介绍

这篇文章主要讲一下JS中面向对象以及 __proto__,ptototype和construcator,这几个概念都是相关的,所以一起讲了. 在讲这个之前我们先来说说类,了解面向对象的朋友应该都知道,如果我要定义一个通用的类型我可以使用类(class).比如在java中我们可以这样定义一个类: public class Puppy{ int puppyAge; public Puppy(age){ puppyAge = age; } public void say() { System.out.

201871010105-曹玉中《面向对象程序设计(Java)》第二周学习总结

            项目                                        内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/nwnu-daizh/p/11435127.html 作业要求目标 1.适应老师教学方式,能按照自主学习要求完成本周理论知识学习: 2.掌握Java Application程序结构: 3.掌握Java语言的数据类型与变量:

node.js中的面向对象

//这里私有对象obj;只能由方法obj2.get*()方法来访问:function Greate(name,age){var obj={name:name;age:age}var obj2={get:function(){ return obj.name } } return obj2 } 这里实例化对象,var newObj=Greate("刘美林',"小银哥)console.log(obj2.get())// 原文地址:https://blog.51cto.com/1282735

JavaScript面向对象(一)——JS OOP基础与JS 中This指向详解

  前  言 JRedu 学过程序语言的都知道,我们的程序语言进化是从"面向机器".到"面向过程".再到"面向对象"一步步的发展而来.类似于汇编语言这样的面向机器的语言,随着时代的发展已经逐渐淘汰:而面向过程的语言也只有C语言老大哥依然坚挺:现在主流的语言(例如Java.C++.PHP等)都是面向对象的语言. 而我们的JavaScript语言,恰恰介于面向过程与面向对象之间,我们称它为"基于对象"的语言.但是,JS中的OOP依