JS变量的定义和数据类型 | 您所在的位置:网站首页 › html定义字符串型数据的代码 › JS变量的定义和数据类型 |
把方法添加到 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 实验室设备网 版权所有 |