在ECMAScript 中Object类是所有类的基类,Object类所拥有 的属性和方法都会被其子类所继承。所以我们有必要了解一下Object类。
Object类方法
hasOwnProperty(property)
该方法用来判断对象是否有某个属性,property为字符串,表示属性名称。
示例:
var obj = new Object; console.log(obj.hasOwnProperty("width"));
obj.width = 15; console.log(obj.hasOwnProperty("width"));
输出:
qml: false
qml: true
isPrototypeOf(object)
该函数用来判断对象是否为另一个对象的原型。
示例:
var obj = new Object;
var obj1 = new Object;
console.log(obj.isPrototypeOf(obj1));
输出:
qml: false
propertyIsEnumerable(property)
该方法用来判断给定的属性是否可以用for…in语句进行枚举。
示例:
var obj = new Object;
obj.children = new Array(12,25); console.log(obj.propertyIsEnumerable("children"));
输出:
qml: true
toLocaleString
该toLocaleString()方法返回一个表示对象的字符串。此方法旨在被特定于语言环境的派生对象覆盖。
示例:
var obj = new Object;
console.log(obj.toLocaleString());
输出:
qml: [object Object]
toString()
该方法返回对象的字符串表示。在qml中,很多qt提供的类型的toString()方法会返回其对应的C++类型名字或者QML类型名称。
示例:
var obj = new Object;
console.log(obj.toLocaleString());
输出:
qml: [object Object]
valueOf()
该方法返回最适合对象的原始值。
示例:
var obj = new Object;
console.log(obj.toLocaleString());
输出:
qml: [object Object]
看完这些基础的东西,其实对我们来说现在这些方法是什么用处都没有的。至于到底在什么场合下我们会使用这些方法,就等到我们碰到的时候在来细说吧。
在ECMAScript 中有一个很有趣的地方,那就是对象的属性可以动态的增加或者删除。这一点和我们接触的传统编程语言比如c,c++,java等有很大的不同。无疑这一点对我们来说是很方便的,如果我们在初始设计的时候没有考虑周全,那么在我们需要的时候直接加一个属性,而不需要去整体修改。
让我们一起看看如下代码:
var obj = new Object;
console.log(obj.name);
obj.name = "QML";
console.log(obj.name);
大家可以猜到会有什么样的输出吗?想必这点难不住各位,看看是否和你想的一致呢?
输出:
qml: undefined
qml: QML
结果不出大家意料吧,在没有定义name属性的时候,获取它的值 当然是undefined的了。。。估计有不少小伙认为会报错的。。刚开始我也是这样认为的,所以还是敲敲代码让自己放心一点的,别人说的不一定都是对的,哪怕最经典的教科书。。。。我们的有怀疑精神。
既然属性可以动态的添加,那么可不可以动态的增加方法呢?答案是肯定的,在ECMAScript 中可以动态的增加方法.
示例:
var obj = new Object;
obj.name = "QML";
obj.printInfo = function printInfo()
{
console.log(obj.name);
}
obj.printInfo();
输出:
qml: QML
更令人想不到的是:在ECMAScript 中我们竟然可以使用数组下标的方式来对对象的属性和方法进行访问。
换一个说法,对象就好比是key-value对的集合,属性和方法就是key,其指向的就是value。
示例:
var obj = new Object;
obj.name = "QML";
obj.printInfo = function printInfo()
{
console.log(obj.name + "-functions");
}
obj["printInfo"]();
console.log(obj["name"]);
输出:
qml: QML-functions
qml: QML
好了,最后我们在来说了解一下如何用for..in来枚举对象的属性。
在之前我们就提到过propertyIsEnumerable方法可以用来判断对象的属性是否可以枚举,大多数自定义属性和方法都是可以枚举的,而内置对象或者宿主对象多数核心属性是不能枚举的。
示例:
var obj = new Object;
obj.name = "QML";
obj.printInfo = function printInfo()
{
console.log(obj.name + "-functions");
}
for(var prop in obj)
{
console.log(prop, ",", obj[prop]);
}
输出:
qml: name , QML
qml: printInfo , function() { [code] }