Object.prototype
屬性表示Object的原型對(duì)象壶辜。
JavaScript中幾乎所有的對(duì)象都是
Object的實(shí)例; 所有的對(duì)象都繼承了Object.prototype的屬性和方法拳缠,
它們可以被覆蓋(除了以null為原型的對(duì)象轻绞,如 Object.create(null))。
例如择克,新的構(gòu)造函數(shù)的原型覆蓋原來(lái)的構(gòu)造函數(shù)的原型椅野,提供它們自己的 toString()
方法.凡资。對(duì)象的原型的改變會(huì)傳播到所有對(duì)象上,除非這些屬性和方法被其他對(duì)原型鏈更里層的改動(dòng)所覆蓋冗懦。
Object.prototype.constructor
返回創(chuàng)建實(shí)例對(duì)象的 Object構(gòu)造函數(shù)的引用爽冕。注意,此屬性的值是對(duì)函數(shù)本身的引用披蕉,而不是一個(gè)包含函數(shù)名稱的字符串颈畸。該值為只讀的原始類型前塔,如1,true和
"test"`承冰。
Object.hasOwnProperty()方法會(huì)返回一個(gè)布爾值华弓,指示對(duì)象是否具有指定的屬性作為自身(不繼承)屬性。
obj.hasOwnProperty(prop)
prop 要檢測(cè)的屬性困乒。
Object.prototype.isPrototypeOf()
prototypeObj.isPrototypeOf(object)
isPrototypeOf()方法允許你檢查一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上寂屏。
Object.defineProperty()
Object.defineProperty(obj, prop, descriptor)
Object.defineProperty() 方法會(huì)直接在一個(gè)對(duì)象上定義一個(gè)新屬性,或者修改一個(gè)對(duì)象的現(xiàn)有屬性娜搂, 并返回這個(gè)對(duì)象迁霎。
Object.defineProperties()
Object.defineProperties(obj, props)
方法直接在一個(gè)對(duì)象上定義新的屬性或修改現(xiàn)有屬性,并返回該對(duì)象百宇。
var obj = {};
Object.defineProperties(obj, {
'property1': {
value: true,
writable: true
},
'property2': {
value: 'Hello',
writable: false
}
// etc. etc.
});
Object.getOwnPropertyDescriptor()
Object.getOwnPropertyDescriptor(obj, prop)方法返回指定對(duì)象上一個(gè)自有屬性對(duì)應(yīng)的屬性描述符考廉。(自有屬性指的是直接賦予該對(duì)象的屬性,不需要從原型鏈上進(jìn)行查找的屬性)携御。
var o, d;
o = { get foo() { return 17; } };
d = Object.getOwnPropertyDescriptor(o, "foo");
// d {
// configurable: true,
// enumerable: true,
// get: /*the getter function*/,
// set: undefined
// }
o = { bar: 42 };
d = Object.getOwnPropertyDescriptor(o, "bar");
// d {
// configurable: true,
// enumerable: true,
// value: 42,
// writable: true
// }
o = {};
Object.defineProperty(o, "baz", {
value: 8675309,
writable: false,
enumerable: false
});
d = Object.getOwnPropertyDescriptor(o, "baz");
// d {
// value: 8675309,
// writable: false,
// enumerable: false,
// configurable: false
// }
Object.getOwnPropertyDescriptors()
Object.getOwnPropertyDescriptors(obj)
所指定對(duì)象的所有自身屬性的描述符昌粤,如果沒有任何自身屬性,則返回空對(duì)象啄刹。
Object.getOwnPropertyNames()
Object.getOwnPropertyNames(obj)方法返回一個(gè)由指定對(duì)象的所有自身屬性的屬性名(包括不可枚舉屬性但不包括Symbol值作為名稱的屬性)組成的數(shù)組涮坐。
var arr = ["a", "b", "c"];
console.log(Object.getOwnPropertyNames(arr).sort()); // ["0", "1", "2", "length"]
// 類數(shù)組對(duì)象
var obj = { 0: "a", 1: "b", 2: "c"};
console.log(Object.getOwnPropertyNames(obj).sort()); // ["0", "1", "2"]
// 使用Array.forEach輸出屬性名和屬性值
Object.getOwnPropertyNames(obj).forEach(function(val, idx, array) {
console.log(val + " -> " + obj[val]);
});
// 輸出
// 0 -> a
// 1 -> b
// 2 -> c
//不可枚舉屬性
var my_obj = Object.create({}, {
getFoo: {
value: function() { return this.foo; },
enumerable: false
}
});
my_obj.foo = 1;
console.log(Object.getOwnPropertyNames(my_obj).sort()); // ["foo", "getFoo"]
Object.getPrototypeOf()
Object.getPrototypeOf(object)方法返回指定對(duì)象的原型(內(nèi)部[[Prototype]]屬性的值)。
var proto = {};
var obj = Object.create(proto);
Object.getPrototypeOf(obj) === proto; // true
Object.prototype.isPrototypeOf()
prototypeObj.isPrototypeOf(object)方法用于測(cè)試一個(gè)對(duì)象是否存在于另一個(gè)對(duì)象的原型鏈上誓军。
function Foo() {}
function Bar() {}
function Baz() {}
Bar.prototype = Object.create(Foo.prototype);
Baz.prototype = Object.create(Bar.prototype);
var baz = new Baz();
console.log(Baz.prototype.isPrototypeOf(baz)); // true
console.log(Bar.prototype.isPrototypeOf(baz)); // true
console.log(Foo.prototype.isPrototypeOf(baz)); // true
console.log(Object.prototype.isPrototypeOf(baz)); // true
Object.prototype.hasOwnProperty()
obj.hasOwnProperty(prop)方法會(huì)返回一個(gè)布爾值袱讹,指示對(duì)象是否具有指定的屬性作為自身(不繼承)屬性。
o = new Object();
o.prop = 'exists';
function changeO() {
o.newprop = o.prop;
delete o.prop;
}
o.hasOwnProperty('prop'); // 返回 true
changeO();
o.hasOwnProperty('prop'); // 返回 false