JS变量的定义和数据类型 您所在的位置:网站首页 html定义字符串型数据的代码 JS变量的定义和数据类型

JS变量的定义和数据类型

2024-05-20 20:03| 来源: 网络整理| 查看: 265

把方法添加到 JavaScript 对象

方法只不过是附加在对象上的函数。

在构造器函数内部定义对象的方法:

function person(firstname,lastname,age,eyecolor)

{     this.firstname=firstname;     this.lastname=lastname;     this.age=age;     this.eyecolor=eyecolor;

     this.changeName=changeName;                      //chagename为person对象的方法。 function changeName(name) {    this.lastname=name; }}

var myFather=new person("Joe","Dom",50,"blue); myFather.chageName("Jeck"); document.write(myFather.lastname); 显示结果为:Jeck.

changeName() 函数 name 的值赋给 person 的 lastname 属性。

JavaScript 类

JavaScript 是面向对象的语言,但 JavaScript 不使用类。

在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对象的语言中那样)。

JavaScript 基于 prototype,而不是基于类的。

JavaScript prototype 属性

1 原型法设计模式

 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。

2 javascript的方法可以分为三类:

a 类方法

b 对象方法

c 原型方法

例子:

 

3 obj1.func.call(obj)方法

意思是将obj看成obj1,调用func方法

  prototype是什么含义? 定义和用法

prototype 属性允许您向对象添加属性和方法

注意: Prototype 是全局属性,适用于所有的Javascript对象。Javascript中对象的prototype属性的解释是:返回对象类型原型的引用

语法 1. object.prototype.name=value;  //给object新增属性name,并赋值value; 2.A.prototype.方法名=function(){ }

举例:

输出结果为:

上面的代码其实也相当于:

 

3. A.prototype = new B();

理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。

我们首先定义了baseClass类,然后我们要定义extentClass,但是我们打算以baseClass的一个实例为原型,来克隆的extendClass也同时包含showMsg这个对象方法。

extendClass.prototype = new baseClass()就可以阅读为:extendClass是以baseClass的一个实例为原型克隆创建的。

那么就会有一个问题,如果extendClass中本身包含有一个与baseClass的方法同名的方法会怎么样?

下面是扩展实验2:

实验证明:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。

那么又会有一个新的问题:

如果我想使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办?

 

答案是可以使用call:

 

复制代码 extendClass.prototype = new baseClass();var instance = new extendClass();

var baseinstance = new baseClass();baseinstance.showMsg.call(instance);//显示baseClass::showMsg

复制代码

 

这里的baseinstance.showMsg.call(instance);阅读为“将instance当做baseinstance来调用,调用它的对象方法showMsg”

好了,这里可能有人会问,为什么不用baseClass.showMsg.call(instance);

这就是对象方法和类方法的区别,我们想调用的是baseClass的对象方法

用实例谈谈javascript中的this和prototype

本文通过几个实例谈谈js中一些基础概念的问题。首先回顾一下js这门语言的特点:除了对象什么都没有。函数在js语言中被看作一种特殊的数据类型,特殊在包含代码并且可以执行,但落点在它是一种数据类型,与数字、字符串等一样。

   理解了这个,那么js语言中的全局作用域和函数作用域、全局变量和局部变量。可以通过全局对象和非全局对象划分。如果函数或其他数据类型,不依托非全局变量,那么就默认依托全局变量,即作为全局对象的属性或方法,否则被当作局部对象方法或属性。this被用作指向属性和方法所依托的对象。搞清楚了这个,this的判断就基本上不会出现问题了。

   以下实例(点击查看)为第七个内容的实例。

以上代码,倒数第三、四行代码都不难理解,倒数第一行代码怎么理解呢?首先我们看jj定义在全局对象中,即jj是window的属性,从jj的赋值我们知道,jj是一个方法,jj()也就相当于window.jj(),即调用函数的this指向全局对象window。

如下代码是回复一个网友提问的解答:

call和apply函数都可以改变this指针的指向,但是prototype属性会被丢弃掉,通过实例不难验证。

call和apply的定义以及应用

 

1、方法定义

call方法:语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象。 说明: call 方法可以用来代替另一个对象调用一个方法。call 方法可将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象。 如果没有提供 thisObj 参数,那么 Global 对象被用作 thisObj。 

apply方法:语法:apply([thisObj[,argArray]]) 定义:应用某一对象的一个方法,用另一个对象替换当前对象。 说明: 如果 argArray 不是一个有效的数组或者不是 arguments 对象,那么将导致一个 TypeError。 如果没有提供 argArray 和 thisObj 任何一个参数,那么 Global 对象将被用作 thisObj, 并且无法被传递任何参数。

 实例:

 

 

 

 

通过上述两个例子我们得知:当对象A.a方法调用call方法,而且B对象的实例b为call的参数时,将A方法附加给b,也就是说b拥有了对象A的a方法。

即:

function A(){

   this.name=“zhangsan”;

   this.showname=function{

alert(this.name);}

}

function B(){

 this.name="lisi;

}

var a=new A();

var b=new B();

a.showname.call(b,",");   //结果为在窗口弹出lisi;

当对象A.call(对象B)时,表示A对象代替B对象,相当于B对象是A对象的复制,B对象拥有了A对象相同的属性和方法。 JavaScript for...in 循环

JavaScript for...in 语句循环遍历对象的属性。

语法 for (variable in object) {   code to be executed }

注意: for...in 循环中的代码块将针对每个属性执行一次。

实例

循环遍历对象的属性:

实例 var person={fname:"John",lname:"Doe",age:25}; 

for (x in person)  {  txt=txt + person[x];  }



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有