javaScript学习 面向对象编程

学习JavaScript的面向对象编程——JavaScript贪吃蛇小游戏 JavaScript贪吃蛇小游戏——学习JavaScript的面向对象编程 预览支持移动端和pc端哦。 Github源码地址:https://github.com/fu-x/snake 游戏预览:http://coolxiang.top/snake 编程思想:面向对象 分析 首先对贪吃蛇游戏进行逻辑分析。 1. 小蛇需要移动,需要一个参数表示移动方向。 2. 小蛇可以吃食物,蛇头和食物坐标相等让... 阅读详情


下面介绍了几种创建js对象的方式,实际上这并不是面向对象的编程。

因为js本身就是面向对象的编程语言,但是js中没有类和继承的概念,只有原型链。

也就是说从普遍意义上说,js语言本身是不完备的面向对象的语言。因为他没有类和继承的概念。

但是,js强大的原型链能够模拟实现类和继承。

完成继承和类的概念,才是js面向对象编程的才是当务之急。


要构建继承和类,就必须先理解原型的概念。


网上发现了一篇文章,讲的很好 《javaScript继承机制的设计思想》


一直以来我对原型的概念都不是很理解。尽管我已经使用jQuery写了一年多的项目,并接触到一些ext.js,easyUI,jqueryMobile,backbone,argular...等等很多框架。


里面的继承方式和类的概念一直以来都没有很好的理解,只是靠着记忆,能勉强解释这些东西。


原型:

function Dog(name){
this.name = name;
this.species = "犬科" }
var dogA = new Dog("大毛");
var dogB = new Dog("二毛");
dogA.species ="猫科";
alert(dogA.species);//猫科
alert(dogB.species);//犬科
上面的例子有一个问题,尽管看起来,dogA和dogB都是通过Dog创建的对象。但是dogA和dogB并没有共享的数据,也就说a和b只有本地属性。没有共同的引用属性。

仅仅使用new的方式修改其中的一个属性另一个是没有影响的。有没有方式可以共享属性。于是就引入了原型。

function Dog(name){
    this.name =name;     
}
Dog.prototype.s = "犬科";
var dogA=new Dog("大毛");
var dogB=new Dog("二毛");
alert(dogA.s +"||" +dogB.s);
Dog.prototype.s="猫科";
alert(dogA.s +"||" +dogB.s);
通过原型的方式可以解决对象属性的共享。就是这么简单。

另外提供了一些,方法判断是引用原型的属性还是本地的属性。

Dog.isPrototypeOf(dogA);//true

dogA.hasOwnProperty(“name”);//true

dogA.hasOwnProperty(“s”);//false

//for in 只可以循环到可枚举的属性,prototype 和constructor是不可枚举的

类和创建对象:


一 、生成对象的原始模式。

 var Cat = {

    name : '',

    color : ''

  } 
//我们需要根据这个原型的规则,创建对象
var cat1 = {}; // 创建一个空对象<p>    cat1.name = "大毛"; // 按照原型对象的属性赋值</p><p>    cat1.color = "黄色";</p><p>  var cat2 = {};</p><p>    cat2.name = "二毛";</p><p>    cat2.color = "黑色"; </p>
好了,这就是最简单的封装了,把两个属性封装在一个对象里面。

但是,这样的写法有两个缺点,

一是如果多生成几个实例,写起来就非常麻烦;

二是实例与原型之间,没有任何办法,可以看出有什么联系。


二、原始模式的改进:

function Cat(name,color){

    return {

      name:name,

      color:color

    }

  } 
var cat1 = Cat("大毛","黄色");<p>  var cat2 = Cat("二毛","黑色");</p>
这种方法的问题依然是,cat1和cat2之间没有内在的联系,不能反映出它们是同一个原型对象的实例。

只是解决了代码重复的问题。


三、构造函数方式

function Cat(name,color){

    this.name=name;

    this.color=color;

  } 
//我们现在就可以生成实例对象了
var cat1 = new Cat("大毛","黄色");<p>  var cat2 = new Cat("二毛","黑色");</p><p>  alert(cat1.name); // 大毛</p><p>  alert(cat1.color); // 黄色</p><p>//这时cat1和cat2会自动含有一个constructor属性,指向它们的构造函数。</p><p>alert(cat1.constructor == Cat); //true</p><p>  alert(cat2.constructor == Cat); //true</p>//Javascript还提供了一个instanceof运算符,验证原型对象与实例对象之间的关系。

alert(cat1 instanceof Cat); //true

  alert(cat2 instanceof Cat); //true

这种方式实际上解决上面提到的两个问题。

看起来构造函数方法很好用,但是存在一个浪费内存的问题。

我们现在为Cat对象添加一个不变的属性"type"(种类),再添加一个方法eat(吃老鼠)。那么,原型对象Cat就变成了下面这样:

function Cat(name,color){

    this.name = name;

    this.color = color;

    this.type = "猫科动物";
     this.eat = function(){alert("吃老鼠");};

  } 
//还是采用同样的方法,生成实例:
var cat1 = new Cat("大毛","黄色");<p>  var cat2 = new Cat ("二毛","黑色");</p><p>  alert(cat1.type); // 猫科动物</p><p>  cat1.eat(); // 吃老鼠 </p>

表面上好像没什么问题,但是实际上这样做,有一个很大的弊端。

那就是对于每一个实例对象,type属性和eat()方法都是一模一样的内容,每一次生成一个实例,都必须为重复的内容,多占用一些内存。这样既不环保,也缺乏效率。

 alert(cat1.eat == cat2.eat); //false

能不能让type属性和eat()方法在内存中只生成一次,然后所有实例都指向那个内存地址呢?回答是可以的。

四 、原型模式

Javascript规定,每一个构造函数都有一个prototype属性,指向另一个对象。这个对象的所有属性和方法,都会被构造函数的实例继承。

这意味着,我们可以把那些不变的属性和方法,直接定义在prototype对象上。

function Cat(name,color){

    this.name = name;

    this.color = color;

  }

  Cat.prototype.type = "猫科动物";

  Cat.prototype.eat = function(){alert("吃老鼠")}; 
//创建实例
var cat1 = new Cat("大毛","黄色");<p>  var cat2 = new Cat("二毛","黑色");</p><p>  alert(cat1.type); // 猫科动物</p><p>  cat1.eat(); // 吃老鼠</p><span style="color:#FF6666;">
</span>
这时所有实例的type属性和eat()方法,其实都是同一个内存地址,指向prototype对象,因此就提高了运行效率。

alert(cat1.eat == cat2.eat); //true 


其实以上三种方式显而易见,原型的方式更加合理高效。

下面的例子其实和前面的一样可以对照理解。

方式1 工厂方式:

function createCar(color){
    var car=new Object();
    car.color=color;
    car.showColor=function(){
        alert(car.color);
    }
    return car;
}
var car1=createCar("red");
var car2=createCar("green");
car1.showColor();
car2.showColor();

方式2 原型方式
function oMyCar(color){
    this.color=color;
    this.showColor=function(){
        alert(this.color);
    }
}
oMyCar.prototype.showMyColor=function(){
    alert("this is my car,"+this.color);
};
var myCar1=new oMyCar("blue");
//alert(myCar1 instanceof oMyCar);
var myCar2=new oMyCar("orange");
//alert(myCar2 instanceof oMyCar);
myCar1.showMyColor();


3 构造器方式

function CoolCar(color){
    this.color=color;
    if(typeof CoolCar._initialized=="undefined"){
        CoolCar.prototype.showColor=function(){
            alert("cool,"+this.color);
        };
        CoolCar.initialized=true;
    }
}
var coolCar1=new CoolCar("yellow");
coolCar1.showColor();

继承:


一、 构造函数绑定

第一种方法也是最简单的方法,使用call或apply方法,将父对象的构造函数绑定在子对象上,即在子对象构造函数中加一行:

 function Cat(name,color){

    Animal.apply(this, arguments);

    this.name = name;

    this.color = color;

  }

  var cat1 = new Cat("大毛","黄色");

  alert(cat1.species); // 动物

二、 prototype模式

第二种方法更常见,使用prototype属性。

如果"猫"的prototype对象,指向一个Animal的实例,那么所有"猫"的实例,就能继承Animal了。

 Cat.prototype = new Animal();

  Cat.prototype.constructor = Cat;

  var cat1 = new Cat("大毛","黄色");

  alert(cat1.species); // 动物

代码的第一行,我们将Cat的prototype对象指向一个Animal的实例。

 Cat.prototype = new Animal();

它相当于完全删除了prototype 对象原先的值,然后赋予一个新值。但是,第二行又是什么意思呢?

 Cat.prototype.constructor = Cat;

原来,任何一个prototype对象都有一个constructor属性,指向它的构造函数。如果没有"Cat.prototype = new Animal();"这一行,Cat.prototype.constructor是指向Cat的;加了这一行以后,Cat.prototype.constructor指向Animal

  alert(Cat.prototype.constructor == Animal); //true


更重要的是,每一个实例也有一个constructor属性,默认调用prototype对象的constructor属性

alert(cat1.constructor == Cat.prototype.constructor); // true

因此,在运行"Cat.prototype = new Animal();"这一行之后,cat1.constructor也指向Animal

 alert(cat1.constructor == Animal); // true

这显然会导致继承链的紊乱(cat1明明是用构造函数Cat生成的),因此我们必须手动纠正,将Cat.prototype对象的constructor值改为Cat。这就是第二行的意思。

这是很重要的一点,编程时务必要遵守。下文都遵循这一点,即如果替换了prototype对象,

o.prototype = {};

那么,下一步必然是为新的prototype对象加上constructor属性,并将这个属性指回原来的构造函数。

o.prototype.constructor = o;


三、 直接继承prototype

第三种方法是对第二种方法的改进。由于Animal对象中,不变的属性都可以直接写入Animal.prototype。所以,我们也可以让Cat()跳过 Animal(),直接继承Animal.prototype。

现在,我们先将Animal对象改写:

      function Animal(){ }

      Animal.prototype.species = "动物";

然后,将Cat的prototype对象,然后指向Animal的prototype对象,这样就完成了继承。

      Cat.prototype = Animal.prototype;

      Cat.prototype.constructor = Cat;

      var cat1 = new Cat("大毛","黄色");

      alert(cat1.species); // 动物

与前一种方法相比,这样做的

优点是效率比较高(不用执行和建立Animal的实例了),比较省内存。

缺点是 Cat.prototype和Animal.prototype现在指向了同一个对象,那么任何对Cat.prototype的修改,都会反映到Animal.prototype。

所以,上面这一段代码其实是有问题的。请看第二行

Cat.prototype.constructor = Cat;

这一句实际上把Animal.prototype对象的constructor属性也改掉了!

 alert(Animal.prototype.constructor); // Cat

四、 利用空对象作为中介

由于"直接继承prototype"存在上述的缺点,所以就有第四种方法,利用一个空对象作为中介。

var F = function(){};

  F.prototype = Animal.prototype;

  Cat.prototype = new F();

  Cat.prototype.constructor = Cat;


F是空对象,所以几乎不占内存。这时,修改Cat的prototype对象,就不会影响到Animal的prototype对象。

alert(Animal.prototype.constructor); // Animal


我们将上面的方法,封装成一个函数,便于使用。

      function extend(Child, Parent) {

        var F = function(){};

        F.prototype = Parent.prototype;

        Child.prototype = new F();

        Child.prototype.constructor = Child;

        Child.uber = Parent.prototype;

      }


使用的时候,方法如下

extend(Cat,Animal);

  var cat1 = new Cat("大毛","黄色");

  alert(cat1.species); // 动物


这个extend函数,就是YUI库如何实现继承的方法。

另外,说明一点,函数体最后一行

Child.uber = Parent.prototype;


意思是为子对象设一个uber属性,这个属性直接指向父对象的prototype属性。(uber是一个德语词,意思是"向上"、"上一层"。)这等于在子对象上打开一条通道,可以直接调用父对象的方法。这一行放在这里,只是为了实现继承的完备性,纯属备用性质。


五、 拷贝继承

上面是采用prototype对象,实现继承。我们也可以换一种思路,纯粹采用"拷贝"方法实现继承。简单说,如果把父对象的所有属性和方法,拷贝进子对象,不也能够实现继承吗?这样我们就有了第五种方法。

首先,还是把Animal的所有不变属性,都放到它的prototype对象上。

 function Animal(){}

  Animal.prototype.species = "动物";


然后,再写一个函数,实现属性拷贝的目的。这是函数应该是最常用的。jquery等

function extend2(Child, Parent) {

    var p = Parent.prototype;

    var c = Child.prototype;

    for (var i in p) {

      c[i] = p[i];

      }

    c.uber = p;

  } 


这个函数的作用,就是将父对象的prototype对象中的属性,一一拷贝给Child对象的prototype对象。

使用的时候,这样写:

extend2(Cat, Animal);

  var cat1 = new Cat("大毛","黄色");

  alert(cat1.species); // 动物





//------extends---1
function ClassA(color){
    this.color=color;
    this.sayColor=function(){
        alert(this.color);
    };
}
function ClassB(color,name){
    this.newMethod=ClassA;
    this.newMethod(color);
    delete this.newMethod;
    
    this.name=name;
    this.sayName=function(){
        alert(this.name);
    }
}
var b=new ClassB("brrow!!!!!","hello!!");
b.sayColor();
b.sayName();
alert(b.newMethod);//undefined



//-----extends---2--call ==apply
function sayMyColor(pre,suf){
    alert(pre+this.color+suf);
}
var obj=new Object();
obj.color="red";
sayMyColor.call(obj,"this color is ","a vrey nice color indeed.");

function ClassC(color,name){
    ClassA.call(this,color);
    //ClassA.apply(this,new Array(color));
    //ClassA.apply(this.arguments);
    
    this.name=name;
    this.sayMyName=function(){
        alert(this.name);
    }
}
var c=new ClassC("shine","hi!!!");
c.sayColor();
c.sayMyName();


//======extends----3--混合
function ClassA1(color){
    this.color=color;
}
ClassA1.prototype.sayColor=function(){
    alert("+++++"+this.color);
}
function ClassB1(color,name){
    ClassA1.call(this,color );
    this.name=name;
}
ClassB1.prototype=new ClassA1();
ClassB1.prototype.sayName=function(){
    alert(this.name);
}
var b1=new ClassB1("!!!!huhu!!","!!!!!!heihei!!!");
b1.sayColor();
b1.sayName();






正交试验-方差分析-数据展现形式 方差分析(ANOVA, Analysis of Variance)用于比较多个组之间的均值差异,确定因素对响应变量的显著性影响。示例分析。 阅读详情

相关推荐

PMF5.0计算

EPA PMF5.0 计算步骤

nuistsy的博客 4543

JavaScript之继承

JavaScript中的继承 <script type="text/javascript"> /* 对象冒充方式是继承 */ function Animal(name,age){ this.name = name; this.age = age; this.eat = function(){ alert(this.

LuckyStar_H的博客 457

BAPI_REPMANCONF1_CREATE_MTS实战:从MFBF事务码到精准零件反冲的代码级解析

本文深入解析了如何通过BAPI_REPMANCONF1_CREATE_MTS函数实现SAP生产模块中的零件反冲自动化。文章对比了MFBF事务码的手动操作与BAPI编程的优劣,详细拆解了函数的核心参数、数据结构、调用流程及事务控制,并提供了从数据准备到凭证获取的完整代码示例与避坑指南,帮助开发者实现高效、精准的批量投料过账。

weixin_29240343的博客 191

JavaScript——对象

对象 数据属性 数据属性的四个行为特性: Configurable 表示是否可以通过delete删除属性 是否能修改属性的特性 是否能把属性修改为访问属性 默认true Enumerable 表示是否能通过for in 循环返回属性 默认true Writable 表示是否能修改属性的值 默认true Vaule 表示包含这个属性的值 修改属性的特性需要通过ES5的 Obj...

五柳 205

[信号与系统]一阶与二阶连续时间系统和离散时间系统

定义:一阶连续时间系统由一阶线性常系数微分方程描述: dy(t)dt+ay(t)=bx(t) \frac{dy(t)}{dt} + a y(t) = b x(t) dtdy(t)​+ay(t)=bx(t)时间常数:时间常数 τ=1a\tau = \frac{1}{a}τ=a1​ 是系统响应速度的衡量指标。时间常数越小,系统响应越快。冲激响应:一阶系统的冲激响应是指数衰减或增长的形式。例如,对于一个单位冲激输入,响应为: h(t)=bae−at h(t) = \frac{b}{a} e^{-at} h(t)=

Andius的博客 2122

Java:使用Java调用打印机进行打印(JPG、PDF和Word三种文件格式)

目录 一、Java的打印简介 二、Java打印实现 2.1 JPG图片文件格式打印实现 2.2 PDF文件格式打印实现 2.3 Word文件格式打印实现 2.3.1 Word文件采用jacob插件进行打印实现。 2.3.2 先将word转化为pdf文件,然后打印pdf(lz使用) 三、总结 一、Java的打印简介 在我们的实际工作中,经常需要实现打印功能。但由于历史原因,Jav...

vatxiongxiaohui的专栏 8万+

javascript的继承

javascript实现继承的方式     1、类式继承  2、构造函数继承  3、组合继承   4、寄生组合式继承   5、extends继承     (1)类式继承         //声明父类         function Animal() {             this.name = "animal";             this.type = ['pig','

qq_36369717的博客 297

华为交换机链路聚合对接思科交换机链路聚合故障

2台华为交换机采用堆叠方式与思科交换机之间使用链路聚合,华为交换机与cisco交换机链路捆绑接口频繁UP/DOWN,业务中断。

网络工程师日常的博客 2119

javascript 继承与原型继承用法详解

javascript 继承与原型继承用法详解 本文章来给大家总结一下在javascript 继承与原型继承用法,有需要了解继承与原型继承用法的朋友可进入参考参考JavaScript是基于原型的面向对象语言,没有类的概念. 我们先来说说原型prototype。 每个对象都有原型,原型是一种对象,修改对象的原型,可以影响所有由本对象派生的对象,但是如果仅仅修改本对象,并不会影响已经创

u010403387的专栏 489

YOLOv8【第十章:多任务扩展深度篇·第18节】不规则工业缺陷分割——针对划痕、裂纹的 Seg 模型调优!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 3982

【Java核心高阶进阶】44-Java8核心新特性

模块十:Java新特性演进 · 第 1 篇Java 8 是 Java 语言历史上最重要的一次发布,它引入的函数式编程范式从根本上改变了 Java 的编码方式。即便到了 JDK 21 的今天,Lambda、Stream、Optional 仍是日常开发的高频工具。本篇将深入这些特性的语法、原理与底层机制,帮助你不仅会用,更知其所以然。

gaochufukanyongren的博客 24

JavaScript之面向对象编程学习

待做。

zhanlaoban的专栏 284

弹窗提示报错: F:\c\CFX5\bin\Debug\net9.0-windows10.0.26100.0\CFX5.dll 面向无法动态枚举工具箱项目的平台...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 947

JavaScript学习笔记---面向对象编程-JS高级部分(pink老师)

一、面向对象编程介绍 1.1 两大编程思想 1.面向过程编程POP(Process-Oriented Programming) 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一 步实现 ,使用的时候再一个一 个的依次调用就可以了。 举个栗子:将大象装进冰箱,面向过程做法。 面向过程,就是按照我们分析好了的步骤,按照步骤解决问题。 2.面向对象编程OOP(Object Oriented Programming) 面向对象是把事务分解成为一个个对象,然后由对象之间分工与合.

wykkk1的博客 4587

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

JavaScript学习之旅9------JavaScript面向对象编程(OOP)全面解析

JavaScript作为一门动态的、多范式的编程语言,其对面向对象编程(OOP)的支持使得开发者能够构建复杂且高效的应用程序。本文旨在全面解析JavaScript中的面向对象编程,从基础概念到高级应用,为读者提供一个清晰的学习路径。

theskylife的博客 1735

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JavaScript学习-面向对象编程

XMind下载链接 概要说明 创建对象 原型继承 class继承

王学明 231

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

JavaScript学习总结【8】面向对象编程

1、什么是面向对象编程   要理解面向对象,得先搞清楚什么是对象,首先需要明确一点这里所说的对象,不是生活中的搞男女朋友对象,面向对象就是面向着对象,换在代码中,就是一段代码相中了另一段代码,自此夜以继日的含情脉脉的面向着这一段代码,这就叫做面向对象,谁要这么给人解释,那笑话可就闹大了,但是可以把男朋友或者女朋友视为一个对象,之前我们也简单的介绍过对象,即可以把一个人视为一个对象,对象有他的

不忘初心,方得始终 1580

【JavaScript学习总结】【8】、面向对象编程

要理解面向对象,得先搞清楚什么是对象,首先需要明确一点这里所说的对象,不是生活中的搞男女朋友对象,面向对象就是面向着对象,换在代码中,就是一段代码相中了另一段代码,自此夜以继日的含情脉脉的面向着这一段代码,这就叫做面向对象,谁要这么给人解释,那笑话可就闹大了,但是可以把男朋友或者女朋友视为一个对象,之前我们也简单的介绍过对象,即可以把一个人视为一个对象,对象有他的属性和方法,属性如:性别、身高、体重、籍贯等,方法有走、跑、跳等。

lily19970107的博客 212

从Prototype学习JavaScript面向对象编程

概述 JavaScript是一种基于对象的编程语言。它是灵活的,既有面向过程(也就是面向函数)的编程,也有面向对象的编程。因此我称它是基于对象的编程语言。 对于JavaScript的面向过程的编程特性,就不用多说了,学过C语言的,就很容易理解什么是面向函数的编程。我看Prototype源码主要就是来理解在JavaScript中的面向对象编程的。 我在学习Prototype源码时,将...

189

JavaScript学习之面向对象编程-04

学习廖雪峰课程笔记: 原地址:https://www.liaoxuefeng.com/wiki/1022910821149312/1023020925712064 面向对象编程 JavaScript的所有数据都可以看成对象,JavaScript的面向对象编程和大多数其他语言如Java、C#的面向对象编程都不太一样。面向对象的两个基本概念: 类:类是对象的类型模板,例如,定义Student类来表示学生,类本身是一种类型,Student表示学生类型,但不表示任何具体的某个学生; 实例:实例是根据类创建的.

xym222的博客 323

JavaScript的学习4——面向对象编程

前言 JavaScript不区分类和实例的概念,而是通过原型(prototype)来实现面向对象编程。 Object.create()方法可以传入一个原型对象,并创建一个基于该原型的新对象,但是新对象什么属性都没有,因此,我们可以编写一个函数来创建xiaoming: // 原型对象: var Student = { name: 'Robot', height: 1.2, run: function () { console.log(this.name + ' is r

十五春会的博客 289

JavaScript面向对象编程学习总结

JavaScript面向对象编程 文章目录JavaScript面向对象编程JavaScript所有属性和方法全部封装在对象中1、JavaScript创建对象2、JavaScript继承对象3、从外部访问内部函数的属性及方法4、JavaScript的闭包函数4.1闭包函数的定义:4.2闭包函数的特性:4.3闭包函数的强大用途:4.3.1自执行函数4.3.2闭包缓存结果4.3.3使用闭包访问函数内部变...

Afanda 728

javascript 面向对象编程学习

javascript 面向对象编程学习定义对象(function() { //私有方法 function test(age) { alert(age); } //公用对象和属性 window.person = {}; person.init = { age: 18, getAge: function(ag

xiawu1990的专栏 459

JavaScript的对象和面向对象编程学习篇

JavaScript的对象和面向对象编程学习篇标准对象DateRegExpJSON面向对象编程创建对象原型继承class继承 标准对象 在JavaScript的世界里,一切都是对象。但是某些对象还是和其他对象不太一样。为了区分对象的类型,用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // 'number' typeof NaN; // 'number' typeof 'str'; // 'string' typeof true; // 'boolean' typeof

cug-jdc的博客 390

JavaScript学习笔记-面向对象编程

JavaScript学习笔记 面向对象编程 1、面向对象概念 1-1、对象基本概念 ECMAScript有两种开发模式: 函数式:面向过程的开发模式,每个步骤都需要自己完成,注重的是实现过程。 面向对象: 将对象作为程序的基本单元,将程序分解为数据和操作的集合。 面向对象基本概念: 类:类是对象的类型模板,将具有同一类属性和方法的对象抽象出来称为一个类。 实例:实例时根据类创建的对象,是类的个体表现。 但是ECMAScript中没有类的概念,因此它的对象也基于类的语言中的对象有所不同。 1-2、对象

百念成诗 240

JS面向对象编程学习

学习目标:1、掌握JS中的类(原型对象)和对象。2、什么是成员变量和成员方法。3、掌握构造方法的使用。补充:关于双等号(==):1、如果等号两边都是字符串时,则比较内容是否相等2、如果等号两边是数字时,则比较数值大小是否相等3、如果等号两边是对象或者对象的函数,则比较地址是否相等(即判断两者是否引用的同一对象) function Person(){ } v...

weixin_30819085的博客 66
上一篇: jquery mobile 经验小结 (1)
下一篇: log4j 使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值