js中访问对像的属性却返回undefined

js中访问对像的属性却返回undefined,第1张

访问对象属性首先从自身找,然后从原型链上找,找到则返回,没找到返回undefined

// 构造函数
function Foo(name) {
    thisname = name;
}
var foo = new Foo('Tom'); // 实例对象
consolelog(fooname); // Tom 自身找到直接返回
consolelog(footoString()); 
/
  自身没有 toString 方法,从隐式原型链上找 foo__proto__ = Fooprototype => Fooprototype__proto__ = Objectprototype
 /

C#代码返回的对象做JSON字串化处理

如:{Model:{"name":"name","num":0,"id":1}};

客户端JavaScript通用Ajax远程调用C#的页面后获取返回的JSON字串,转成Json对象,做下一步处理.

ECMAScript5标准中有两种
//1
ObjectdefineProperty(obj,name,{
get:function(){}
})
//2
ObjectdefineProperties(obj,{
name:{
get:
}
})
比较旧的浏览器
obj__defineGetter__("name", function(){ });

使用JavaScript中的ActiveXObject 对象方法:
语法
newObj = new ActiveXObject(servernametypename[, location])
参数
newObj:必选。 ActiveXObject 分配到的变量名称。
servername:必选。 提供对象的应用程序的名称。
typename :必选。 要创建的对象的类型或类。
location:可选。 要在其中创建对象的网络服务器的名称。
备注
自动化服务器至少提供一种对象。 例如,字处理应用程序可能会提供应用程序对象、文档对象和工具栏对象。
你可以在 HKEY_CLASSES_ROOT 注册表项中标识宿主 PC 上的 servernametypename 值。 例如,下面是可在此处找到的几个值示例,具体取决于安装的程序:
ExcelApplication
ExcelChart
ScriptingFileSystemObject
WScriptShell
WordDocument
要求
在以下文档模式中受支持:Quirks、Internet Explorer 6 标准、Internet Explorer 7 标准、Internet Explorer 8 标准、Internet Explorer 9 标准、Internet Explorer 10 标准和 Internet Explorer 11 标准。 在 Windows 8x 应用商店应用中不受支持。 请参见JavaScript 版本信息。
应用相关方法
创建对象实例后,就可以使用对象的相关方法了。比如,使用CreateTextFile方法创建一个文本文件:var fso = new ActiveXObject(“ScriptingFileSystemObject”);var f1 = fsocreatetextfile(“c:\\myjstesttxt”,true”);
访问对象相关属性
要访问对象的相关属性,首先要建立指向对象的句柄,这就要通过get系列方法实现:GetDrive负责获取驱动器信息,GetFolder负责获取文件夹信息,GetFile负责获取文件信息。比如,指向下面的代码后,f1就成为指向文件c:\testtxt的句柄:var fso = new ActiveXObject(“ScriptingFileSystemObject”);var f1 = fsoGetFile(“c:\\myjstesttxt”);然后,使用f1访问对象的相关属性。比如:var fso = new ActiveXObject(“ScriptingFileSystemObject”);var f1 = fsoGetFile(“c:\\myjstesttxt”);alert(“File last modified: ” + f1DateLastModified);执行上面最后一句后,将显示c:\myjstesttxt的最后修改日期属性值。但有一点请注意:对于使用create方法建立的对象,就不必再使用get方法获取对象句柄了,这时直接使用create方法建立的句柄名称就可以:var fso = new ActiveXObject(“ScriptingFileSystemObject”);var f1 = fsocreatetextfile(“c:\\myjstesttxt”,true”);alert(“File last modified: ” + f1DateLastModified);
*** 作驱动器(Drives)
使用FileSystemObject对象来编程 *** 作驱动器(Drives)和文件夹(Folders)很容易,这就象在Windows文件浏览器中对文件进行交互 *** 作一样,比如:拷贝、移动文件夹,获取文件夹的属性。
Drives对象属性
Drive对象负责收集系统中的物理或逻辑驱动器资源内容,它具有如下属性:l TotalSize:以字节(byte)为单位计算的驱动器大小。l AvailableSpace或FreeSpace:以字节(byte)为单位计算的驱动器可用空间。l DriveLetter:驱动器字母。l DriveType:驱动器类型,取值为:removable(移动介质)、fixed(固定介质)、network(网络资源)、CD-ROM或者RAM盘。l SerialNumber:驱动器的系列码。l FileSystem:所在驱动器的文件系统类型,取值为FAT、FAT32和NTFS。l IsReady:驱动器是否可用。l ShareName:共享名称。l VolumeName:卷标名称。l Path和RootFolder:驱动器的路径或者根目录名称。
Drive对象 *** 作例程
下面的例程显示驱动器C的卷标、总容量和可用空间等信息:var fso, drv, s =”";fso = new ActiveXObject(“ScriptingFileSystemObject”);drv = fsoGetDrive(fsoGetDriveName(“c:\\”));s += “Drive C:” + ” – “;s += drvVolumeName + “\n”;s += “Total Space: ” + drvTotalSize / 1024;s += ” Kb” + “\n”;s += “Free Space: ” + drvFreeSpace / 1024;s += ” Kb” + “\n”;alert(s);

对象的属性确实可以通过类似于通过访问数组的中括号形式进行访问。
原理上来讲,是js这样设计的,很多弱类型语言都是如此设计。
可是并不能理解为对象跟数组没区别,例如说,你可以使用Array类型方括号的形式访问Object类型数据的属性。但是反过来,不能使用Object的点号访问Array类型数据的内容。
在js里,Key对应Value的数据结构,其实都是Object类型的,Array类型的数据都是一维的,数字下标的数据集合。
另外,二楼给你举得例子是没问题的,非常实用,插一句,还有另一种情况
就是你要访问的key是有空格的,也可以使用这种方式,例如说 people['first name'],这种情况是没法使用点号进行访问的。
最后,一楼的那个理解完全是错误的,这跟JSON没任何关系


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13396668.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存