当前位置:首页 » 密码管理 » javascript访问器属性

javascript访问器属性

发布时间: 2022-06-30 09:10:14

Ⅰ 对象决定类的属性

ECMAScript有两种属性:

1.数据属性:

数据属性包含一个数据的位置,在这个位置可以读取和写入值。

2.访问器属性

访问器属性不包含数据值:它们包含一对getter和setter函数(不过这两个函数都不是必须的),在读取访问器属性时,会调用getter函数,这个函数负责返回有效的值;在写入访问器属性时,会调用setter函数并传入新值,这个函数负责决定如何处理数据。
对象属性是由名字,值和一组特性(attribute)构成的。
在介绍对象属性的特性之前先介绍两个属性:

getter和setter

在ECMAScript5中,属性值可以用一个或两个方法代替,这两个方法就是getter和setter。由这两个函数定义的属性称为“存取器属性”,它不同于“数据属性”,数据数据属性只有一个简单的值。程序在查询存取器属性的值的时候,JS调用getter方法(无参数)。这个方法的返回值就是属性存取表达式的值。当程序设置一个存取器属性的值,JS调用setter方法,将赋值表达式右侧的值当做参数传入setter。这个方法负责设置属性值。可以忽略setter方法的返回值。
和数据属性不同,存取器属性不具有可写性。如果一个数据同时具有getter和setter方法,那么它是一个读/写属性。如果它只有getter方法,那么它是一个只读属性,如果它只有setter方法,那么它是一个只写属性,读取只写属性总是返回undefined。

小插曲:属性访问表达式

属性访问表达式运算得到一个对象属性或一个数组元素的值。JS为属性访问定义了两种语法:

//expression指定对象,identifer指定需要访问的属性名称
expression.identifer
//expression指定对象,第二个表达式指定要访问的属性的名称或者代表要访问数组元素的索引
expression[expression]
1
2
3
4
1
2
3
4
不管用哪种形式的属性访问表达式,在.或者’[‘的表达式总是会首先计算。如果计算结果是null或者undefined,表达式会抛出一个类型错误异常,因为这两个值都不能包含任意属性的值

如果运算结果不是对象(或者数组),JS会将其转换为对象

用.indentifer的写法=更加简单,但是需要注意的是这种方式只适用于访问的属性名称是合法的标识符,并且需要知道要访问的属性名称。如果属性名称是一个保留字或者包含空格标点符号,或者是一个数字(对于数组),则必须使用方括号的写法。

Ⅱ 用JS脚本如何更好的解决找不到ID对象的问题访问器的使用必须条件是什么比如说添加某些属性之类的。

js脚本寻找对象的必须前提是:你想访问的对象输出,必须在对应js代码实际执行的前面。
否则无论用任何办法,都是无法访问到此对象的。

Ⅲ 类的属性访问器有哪些功能和语法

public:这是公有的成员,允许类外直接访问,当然,这要加上类作用域符::, protected:这是保护成员,只允许该类及其派生类访问 private:这是私有成员,只允许在该类中进行访问,当然,在类外只可以通过设定的公有函数进行访问。 更具体的可以参考《C++大学教程第五版》,这本书不错。

javascript数据属性和访问器属性

defineProperties可以让你设置属性的配置,例如如何赋值,如何返回,是否允许被for in遍历,不过这多半是用在oop中的,因为你可能会需要设置对象的私有属性,公共属性是不需要这么复杂的创建过程。

至于其中包含了set和get方法,你可以这么理解,属性的赋值与获取必须按照你设定的方法来执行,例如
get:function(){
return this._year;
},
在调用book.year时就会自动执行get方法,返回你要返回的东西( return this._year),

同样在你执行book.year=111;同样会自动执行set方法,将会按你的要求设置某些东西。

总之赋值与获取都必须由年来控制,比如你永远需要一个大于0的数字做分母,那么你就能控制了
,只要设置好set函数就行。

这些方法按理说应该是用在oop中,js中只要是对象都能用,看你的程序要求了

Ⅳ javascript中_proto_和__proto__的区别左边是一条下划线,右边是两条下划

在javascript中,一个对象就是任何无序键值对的集合,如果它不是一个主数据类型(undefined,null,boolean,number,array,string),那它就是一个对象。
那么如何查看一个对象的原型是啥呢?又如何给一个对象设置原型呢?
标准对象原型访问器Object.getPrototype(object),到目前为止只有Firefox和chrome实现了此访问器。除了IE,其他的浏览器支持非标准的访问器__proto__,而prototype则是一个只有函数才具有的属性,
也就是说,如果这个对象不是函数,那么它就没有prototype这个属性。
下面代码证实了以上结论。

<script>
var a={name:'derek'};
var b=function(name){
name=this.name;
};
document.write(a.prototype+"<br>");//undefined 对象a显然不是一个函数,所以没有prototype这个属性。
document.write(Object.getPrototypeOf(a)+"<br>");//[object Object]
document.write(Object.getPrototypeOf(b)+"<br>");//function Empty() {}
document.write(Object.getPrototypeOf(b)==b.__proto__);//true 这两个的是等价的,只不过浏览器的兼容型不同。
</script>

再说一下javascript的构造函数
1、构造函数和普通的函数一样,但是具有以下两个特殊性质。
2、通常构造函数的首字母是大写的(让识别构造函数变得更容易)。构造函数通常要和 new 操作符结合,用来构造新对象。
下面这个例子很厉害~

基于所知道的知识,请想象创建一个新的对象,并让新对象表现地像数组的过程。一种方法是使用下面的代码。

1
2
3
4
5
6

// 创建一个新的空对象
varo = {};
// 继承自同一个原型,一个数组对象
o.__proto__ = Array.prototype;
// 现在我们可以调用数组的任何方法...
o.push(3);

虽然这段代码很有趣,也能工作,可问题在于,并不是每一个 JavaScript 环境都支持可写的 __proto__ 对象属性。幸运的是,JavaScript 确实有一个创建对象内建的标准机制,只需要一个操作符,就可以创建新对象,并且设置新对象的 __proto__ 引用 – 那就是“new”操作符。
varo =newArray();
o.push(3);

JavaScript 中的 new 操作符有三个基本任务。首先,它创建新的空对象。接下来,它将设置新对象的 __proto__ 属性,以匹配所调用函数的原型属性。最后,操作符调用函数,将新对象作为“this”引用传递。如果要扩展最后两行代码,就会变成如下情况:
varo = {};
o.__proto__ = Array.prototype;
Array.call(o);
o.push(3);

函数的 call 方法允许你在调用函数的情况下在函数内部指定“this”所引用的对象。当然,函数的作者在这种情况下需要实现这样的函数。一旦作者创建了这样的函数,就可以将其称之为构造函数。
我们来测试一下,
var Person=function(name,age){
this.name=name;
this.age=age;
document.write("hello,I'm "+name+" and "+age+" years old"+"<br>");
}
var p1=new Person('derek',23);
document.write(Object.getPrototypeOf(p1)==Person.prototype);//true
document.write(p1.__proto__==Person.prototype);//true 两种访问对象原型的方式会得到相同的结果,前提是非IE6、7、8浏览器。。
可以上面的理论是正确的~
我们接着做实验,看一下继承是怎么实现的~
var Person=function(name,age){
this.name=name;
this.age=age;
document.write("hello,I'm "+name+" and "+age+" years old"+"<br>");
}
Person.prototype.smile=function(){
document.write("O(∩_∩)O~"+"<br>");
}
var p1=new Person('derek',23);
p1.smile();

输出: hello,I'm derek and 23 years old
O(∩_∩)O~
首先,p1这个对象没有smile这个函数,于是去__proto__属性上去找,因为p1.__proto__==Person.prototype,而Person.prototype上恰好有这个函数,因此就会出现上面的运行结果。这个是最简单的原型链,如果Person.prototype上还没有smile()这个函数,那么就会去Person.__proto__去继续找,依次类推。

Ⅵ 如何动态生成 JavaScript 文件

文章目录一、向客户端注册脚本 二、Application_Start 事件里面生成 JavaScript 文件三、用 Web Form 来实现 四、利用一般处理程序 ashx 文件生成的客户端代码调用方式代码下载一、向客户端注册脚本 先用Page.ClentScript.IsClientScriptBlockRegistered()判断脚本是否已经注册,若未注册,则调用 Page.ClientScript.RegisterClicentScriptBlock,具体可以看这篇文章在ASP.NET 2.0 中高效率地使用 JavaScript - Part 1。至于 ASP.NET AJAX,ScriptManager 类有另外一套注册客户端脚本的方法。二、在Web应用程序启动的时候用流往服务器写入JavaScript 脚本文件,即在Application_Start 事件里面生成 JavaScript 文件,然后在页面里调用。 那就在程序启动的时候
string path = Server.MapPath("../js/xyz.js ");
// Delete the file if it exists.if (File.Exists(path)){File.Delete(path);}// Create the file.StreamWriter sr = File.CreateText(path);
sr.WriteLine ("function f1()");
sr.WriteLine ("{");
// 这里是f1的内容
//……sr.WriteLine ("}");
sr.Close(); 三、用 Web Form 来实现 在Page_Load 事件里面输出 JavaScript 脚本流,然后用 Response.End() 方法将当前所有缓冲的输出发送到客户端,停止该页的执行,因为标签是在Page Render 事件呈现的,Page Load 事件先于 Page Render 执行,执行到Response.End() ,结束该页的输出,Page Reader 的内容就不再输出了,则后面的 之类的标签就不会输出。Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.ContentType = "text/javascript" Response.Write("var External = {};" & vbCrLf)
Response.Write("External.hello='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method !';")
Response.End()
End Sub四、利用一般处理程序 ashx 文件 在解决方案资源管理器里面“添加新项”,选择“一般处理程序”,点添加后生成一个 ashx 后缀名的文件。该文件类继承 IHttpHandler 接口,定义 ASP.NET 为使用自定义 HTTP 处理程序同步处理 HTTP Web 请求而实现的协定。它只公开了两个成员IsReusable: 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。如果 IHttpHandler 实例可再次使用,则为 true;否则为 false。将 IsReusable 属性用所提供的重写 IsReusable 属性访问器 (getter) 的代码显式设置为 true 或 false。ProcessRequest: 这个输出数据流的关键方法,它通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。 用context.Response.Write() 向客户端输出数据。
Imports System
Imports System.Web
Public Class OutsiteJS : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
context.Response.ContentType = "text/plain" context.Response.Write("var Outsite = {};")
context.Response.Write("Outsite.greeting = 'Hello! This is outsite javascript created by ashx file(一般处理程序)';")End SubPublic ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get Return False End Get End PropertyEnd Class 生成的客户端代码var External= {};
External.hello='Hello, This is external JavaScript output in Page_Load event and end by Response.End() method !' 调用方式调用方式其实跟通常的调用外部 Javascript 差不多,只是 标签加上 type="text/javascript" 属性,以免识别不了文件类型, src 属性设置为动态文件的文件名,如"makeJS.aspx" 而不是通常的“filename.js”。

Ⅶ 关于javascript: accessor properties 是什么意思

存取器属性;访问器属性

Ⅷ 关于java访问器的问题

1.访问器是针对其他类间接访问包含有访问器的类中的私有属性而设立的,在你的程序中非有涉及到其他类访问,所以删除就没有影响。
2.java中类的成员属性可以不用给于初始化,系统会给他赋予默认值,但对于方法里面的变量(局部变量)就应该为其赋予初值,否则编译会出错。
3.重载就是在原来的基础上,再建立一个新的方法并为其分配新的内存空间,原先的方法不变。对于重载的方法,编译器是通过方法签名来区分具体调用哪一个方法。一个方法的签名由方法名、方法的参数和参数的类型组成,即类中方法的签名具有唯一性。因此,在类中定义重载方法时,每个方法的参数或参数类型要不同。
若方法名,参数类型,参数个数相同的则进行的是重载。

Ⅸ DOM属性和HTML属性的区别

一、是否可变的区别:

html属性中的值是不变的,dom属性的值是变化的。

二、适用场合不同:

核心DOM适合操作节点,如创建,删除,查找等;HTML DOM适合操作属性,如读取或修改属性的值。

三、两者对象不同:

核心DOM :

对象:Document,Node, ElementNode,TextNode,AttributeNode,CommentNode,NodeList

HTML DOM:

对象:image,Table,Form,Input,Select...HTML标签对象化

(9)javascript访问器属性扩展阅读

使用javascript操作DOM属性就是操作javascript对象的属性。javascript对象的属性是不需要声明的。有多种方式可以访问属性,如下:

myImg.src = "xxxxxx" //使用“.”运算符

myImg["src"] = "xxxxxx" // 使用属性访问器

var propName = "src"; myImg[propName] = "xxxxxx" //属性访问器支持变量

注:1)因为提供了属性访问器,所以可以通过下面的方式遍历一个DOM对象的所有属性:

var result = "";

for (var p in myImg){

result += "属性名:" + p + ",属性值:" + myImg[p] + " ";

}

Ⅹ Javascript局部变量有没有属性描述符,如果有怎么获取

js变量没有属性描述符吧但是js对象是有value/configurable/writable/enumerable等数据属性描述符,也包含getter/setter等访问器属性。

热点内容
终端配置账号该如何改密码 发布:2024-05-05 11:24:37 浏览:823
成都存储研发招聘 发布:2024-05-05 11:24:29 浏览:283
电脑服务器名称怎么查找 发布:2024-05-05 10:49:37 浏览:469
电脑连到代理服务器 发布:2024-05-05 10:40:02 浏览:249
华为安卓手机如何投屏到雷克萨斯 发布:2024-05-05 10:37:50 浏览:210
微博上传原图 发布:2024-05-05 10:20:05 浏览:749
服务器换电脑需要什么东西 发布:2024-05-05 09:52:28 浏览:754
老算盘算法 发布:2024-05-05 09:43:10 浏览:841
ps存储显示不含通道 发布:2024-05-05 09:32:35 浏览:103
如何用安卓做一个识物界面表 发布:2024-05-05 09:29:28 浏览:99