首页 > 编程知识 正文

js实例成员(js什么是实例)

时间:2023-12-22 19:14:04 阅读:319048 作者:NULA

本文目录一览:

求助,关于js面向对象成员方法的

JavaScript中对象的创建有以下几种方式:

(1)使用内置对象

(2)使用JSON符号

(3)自定义对象构造

一、使用内置对象

JavaScript可用的内置对象可分为两种:

1,JavaScript语言原生对象(语言级对象),如String、Object、Function等;

2,JavaScript运行期的宿主对象(环境宿主级对象),如window、document、body等。

我们所说的使用内置对象,是指通过JavaScript语言原生对象的构造方法,实例化出一个新的对象。如:

复制代码 代码如下:

var str = new String("实例初始化String");

var str1 = "直接赋值的String";

var func = new Function("x","alert(x)");//示例初始化func

var o = new Object();//示例初始化一个Object

二、使用JSON符号

(i)何谓JSON ?

JSON (JavaScript Object

Notation)即JavaScript对象命名,是一种轻量级的数据交换格式,易于阅读和编写,同时也易于及其解析和生成。它基于

《JavaScript Programming Language, Standard ECMA-262 3rd Edition -

December 1999》的一个子集。JSON是完全独立于语言的文本格式,因此成为数据交换的理想格式。

JSON作为

JavaScript的一个自己,同时ActionScript、C、C#、ColdFusion、E、Java、JavaScript、ML、

ObjectiveCAML、Perl、PHP、Python、Rebol、Ruby、Lua等一系列的语言都提供支持,使得JSON成为Ajax开发的

首选方案。

JSON有两种构建方式,一种是采用简单的逗键/值对地的集合,在不同的语言中被理解为对象、记录、结构、字典、哈希表、有键列表,或者关联数组等,另一种采用有序的值列表,大部分语言把它理解为数组。

常用的创建方式是第一种,即采用逗键/值对地集合的形式。在这种形式下,一个对象以逗{地(左括号)开始,逗}地(右括号)结束。每个逗名称地后跟一个逗:地(冒号),逗

‘键/值' 对地之间使用逗,地(逗号)分隔。

JSON具有以下特点:(1)简单格式化的数据交换;(2)易于人们的读写习惯;(3)易于机器的分析和运行。

在JavaScript中,JSON被理解为对象。通过字符串形式的JSON,数据可以很方便地解析成JavaScript独享,并进行数据的读取传递。通过JSON,在一定程度上客服了JavaScript对象无法作为参数系列化传递的问题。

1,简单的JSON

{name:"刘德华",age:"25",sex:"男"}

2,JSON值的类型

JSON的值可以是简单的数据类型,例如数字、浮点、字符等,也可以是数组及对象。例如以数组作为member键值的JSON:

{member:[{name:"刘德华"},{name:"郭富城"},{name:"张学友"},{name:"黎明"}]}

{

book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],

author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]

}

3,在JavaScript中使用JSON

JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或者工具包,JavaScript默认将JSON当做一个对象处理。

将对象传递给一个变量,例如:

复制代码 代码如下:

var somebooks = {

book:[{name:"三国演义"},{name:"西游记"},{name:"水浒传"},{name:"红楼梦"}],

author:[{name:"罗贯中"},{name:"吴承恩"},{name:"施耐安",{name:"曹雪芹"}}]

}

JSON的每个逗键地相当于对象的属性,例如访问book中的第一个条目,在JavaScript中,就可以简单地使用逗somebooks.book[0].name地来获取逗三国演义地这个值。

我们不但可以将一个JSON字符串转化为对象,反过来将一个对象逗编译地为一个JSON字符串,以方便JavaScript中的对象的传输。例如:

复制代码 代码如下:

var Animals = new Object();

Animals.name = "dog";

Animals.sex = "Male";

Animals.age = "2";

Animals对象无法被序列化传输,将Animals对象转化为JSON字符串,也就是逗{name:"dog",sex:"Male",age:"2"}地。这样,把该JSON字符串作为HTTP请求的一个参数传递,从而达到序列化传输Animals对象的目的。

(ii)JSON通过字符串形式来表达JavaScript的对象。如:

复制代码 代码如下:

var myObject = {nickname:"my girlfried",name:"big

pig"};

JSON

实际上充当了一种在JavaScript对象和字符串之间实现相互转换的协议。由于JSON的逗外表地可以看成但村的字符串,因此JSON在

JavaScript的对象传输方面可以起到一定的作用。例如把对象strObject转换成字符串后进行传输,在达到目的地后通过eval方法将其还原

成对象:

复制代码 代码如下:

function test (o)

{

alert (o.name)

}

var strObject = '{nickname:"my girlfriend",name:"big pig"}';

test (eval_r("(" + strObject + ")"));

三、自定义对象构造

创建高级对象构造有两种方式:使用逗this地关键字构造、使用原型prototype构造。如:

复制代码 代码如下:

//使用this关键字定义构造的上下文属性

function Girl()

{

this.name = "big pig";

this.age = 20;

this.standing;

this.bust;

this.waist;

this.hip;

}

//使用prototype

function Girl(){}

Girl.prototype.name = "big pig";

Girl.prototype.age = 20;

Girl.prototype.standing;

Girl.prototype.bust;

Girl.prototype.waist;

Girl.prototype.hip;

alert(new Girl().name);

上例中的两种定义在本质上没有区别,都是定义逗Girl地对象的属性信息。逗this地与逗prototype地的区别主要在于属性访问的顺序。如:

复制代码 代码如下:

function Test()

{

this.text = function()

{

alert("defined by this");

}

}

Test.prototype.test = function()

{

alert("defined by prototype");

}

var _o = new Test();

_o.test();//输出逗defined by this地

当访问对象的属性或者方法是,将按照搜索原型链prototype

chain的规则进行。首先查找自身的静态属性、方法,继而查找构造上下文的可访问属性、方法,最后查找构造的原型链。

逗this地

与逗prototype地定义的另一个不同点是属性的占用空间不同。使用逗this地关键字,示例初始化时为每个实例开辟构造方法所包含的所有属性、方法

所需的空间,而使用逗prototype地定义,由于逗prototype地实际上是指向父级的一种引用,仅仅是个数据的副本,因此在初始化及存储上都比

逗this地节约资源。

JS类中,静态方法怎么获取实例

1,静态的成员直接类名点成员名就能访问。

2,实例成员你需要先创建新的实例!然后实例名点成员名!

JS怎么在类实例的事件处理函数中访问类实例的成员

在事件处理函数之外定义一个变量 var that = this;

然后在事件处理函数之内用 that.成员名 访问。

如果支持ES6的话,直接使用箭头函数可以直接用 this访问。

javascript的对象和变量之间的区分

0, JavaScript的变量有几种类型: number, string, boolean, function, object, 对象就是变量的一种类型.

1,var request = createRequest();

我可以吧request当作一个变量,由createRequest方法来赋值;

这个说法有歧义, 不是由方法对变量赋值, 而是使用createRequest的返回值为变量赋值.

2, 我也可以把它当作一个object,于是request.xxx可以访问createRequest方法里面的xxx。

这个理解是错的, 从外部不能访问到方法内部定义的变量. 有一种特殊的情况:

function closure(){

var a = 1;

return function() {

return a++;

}

}

var fn = closure();

alert(fn()); //1;

alert(fn()); //2; 函数内部的变量被改变了

这个是JavaScript的闭包机制, 可以在方法外部修改方法的内部变更量. 类似于.Net的委托机制(Java的Callback); 并且这个内部变量的行为类似强制类型语言中的实例私有成员, 参考下面的代码:

//接上面的代码

var fn2 = closure();

alert(fn2()); //1, 创建了新的闭包

alert(fn()); //3, 原有闭包并未释放,

fn = null; //将对闭包内部变量的引用释放(将fn赋其它值也一样, fn = 1;), 则该闭包将会被gc回收

3, 对象, JavaScript对象一定是使用new关键字创建.

var a = {}; //简化写法等价于 var a = new Object();

var b = []; //简化写法等价于 var a = new Array();

4, 实例, javascript不是面向对象的语言, 但是对象有默认的constructor属性, 引用创建对象的function(可以理解为某类型的实例). 但是, 因为javascript是弱类型动态语言, 可以动态修改对象的结构或使用其它类型的引用为变量赋值, 所以并不能在语言层面确保对象的封装, 参考下面的代码:

function class(){

this.a = 1;

this.b = 'a';

}

function somethingElse() {

return 1;

}

//创建3个class的实例

var a = new class();

var b = new class();

var c = new class();

//此时 a.constructor === b.constructor === c.constructor === class;

a.constructor = somethingElse; //覆盖constructor属性, 这样a就和class没有任何关联了, 虽然有一个instanceof二元操作符, 但是其实现是比较prototype, 本例中都没有指定prototype(默认{}), 所以instanceof是无效的, a instanceof class == true, a instanceof somethingElse == true, a instanceof Object == true,

b = new somethingElse(); //这时b就变成somethingElse的实例了(b.constructor === somethingElse), 但是somethingElse方法没有为实例添加任何成员, 所以b = {};

delete c.b; //删除对象的成员, c = {a: 1}, 这样虽然c.constructor === class(还是class的实例), 但是与其它由class创建的实例外观就不同了.

js里为什么实例化的对象没有prototype属性??

自从有了Ajax这个概念,JavaScript作为Ajax的利器,其作用一路飙升。JavaScript最基本的使用,以及语法、浏览器对象等等东东在这里就不累赘了。把主要篇幅放在如何实现JavaScript的面向对象编程方面。 1. 用JavaScript实现类 JavaScritpt没有专门的机制实现类,这里是借助它的函数允许嵌套的机制来实现类的。一个函数可以包含变量,又可以包含其它函数,这样,变量可以作为属性,内部的函数就可以作为成员方法了。因此外层函数本身就可以作为一个类了。如下:function myClass()这里 myClass就是一个类。其实可以把它看成类的构造函数。至于非构造函数的部分,以后会详细描述。 2. 如何获得一个类的实例 实现了类就应该可以获得类的实例,JavaScript提供了一个方法可以获得对象实例。即 new操作符。其实JavaScript中,类和函数是同一个概念,当用new操作一个函数时就返回一个对象。如下:var obj1 = new myClass(); 3. 对象的成员的引用 在JavaScript中引用一个类的属性或方法的方法有以下三种。 1 点号操作符 这是一种最普遍的引用方式,就不累赘。即如下形式:对象名.属性名;对象名.方法名; 2 方括号引用 JavaScript中允许用方括号引用对象的成员。如下:对象名["属性名"];对象名["方法名"]; 这里方括号内是代表属性或方法名的字符串,不一定是字符串常量。也可以使用变量。这样就可以使用变量传递属性或方法名。为编程带来了方便。在某些情况下,代码中不能确定要调用那个属性或方法时,就可以采用这种方式。否则,如果使用点号操作符,还需要使用条件判断来调用属性或方法。 另外,使用方括号引用的属性和方法名还可以以数字开头,或者出现空格,而使用点号引用的属性和方法名则遵循标示符的规则。但一般不提倡使用非标示符的命名方法。 3 使用eval函数 如果不希望使用变量传递变量或方法名,又不想使用条件判断,那么eval函数是一个好的选择。eval接收一个字符串类型的参数,然后将这个字符串作为代码在上下文中执行,返回执行的结果。这里正是利用了eval的这一功能。如下:alert(eval("对象名." + element.value)); 4. 对对象属性,方法的添加、修改和删除操作 JavaScript中,在生成对象之后还可以为对象动态添加、修改和删除属性和方法,这与其它面向对象的语言是不同的。 nbsp

如果帮助到您,请记得采纳为满意答案哈,谢谢!祝您生活愉快! vae.la

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。