关于javascript:Object对象的方法

44次阅读

共计 1428 个字符,预计需要花费 4 分钟才能阅读完成。

Object.setPrototypeOf()

  1. Object.setPrototypeOf(),为现有对象设置原型,返回一个新对象
    接管两个参数:第一个是现有对象,第二是原型对象。
    2、new 命令通过构造函数新建对象实例的过程,其本质是将实例的原型,指向了构造函数的 prototype 属性,而后在实例上执行构造函数。
// 构造函数
function Person(name) {this.name = name;}

// var p = new Person("zhenglijing");
// 等同于将构造函数的原型对象赋给实例对象 p 的属性__proto__
p.__proto__ = Object.setPrototypeOf({},Person.prototype);
Person.call(p,"zhenglijing");
 这样实例的属性__proto__就指向了构造函数的原型,这样就造成了原型链,当在实例中找不到属性或办法时,就通过原型链进行查找。在实例中执行构造函数,构造函数就是一个一般函数,如果一个一般函数在一个对象中被执行了,那么 this 就是该实例。比方 
var o = {};
function Person(name) {this.name = name;}
// 把构造函数放在对象 o 中执行,那么这个 this 就是 o 对象了,执行完后,该 o 对象就有了实例属性 name 了。Person.call(o,"zhenglijing");

#### getPropertyOf

Object.getPropertyOf(obj) 是 ES5 中用来失去 obj 对象的原型对象的规范办法。

function User(name, passwordHash) { 
 this.name = name; 
 this.passwordHash = passwordHash; 
} 
User.prototype.toString = function() {return "[User" + this.name + "]"; 
}; 
User.prototype.checkPassword = function(password) {return hash(password) === this.passwordHash; 
}; 
var u = new User("sfalken", "0ef33ae791068ec64b502d6cb0191387"); 

Object.getPrototypeOf(u) === User.prototype; // true

Object.isExtensible(obj)

**Object.isExtensible()** 办法判断一个对象是否是可扩大的(是否能够在它下面增加新的属性)。
默认状况下,对象是可扩大的:即能够为他们增加新的属性。以及它们的 __proto__ 属性能够被更改。Object.preventExtensions 办法让一个对象变的不可扩大,也就是永远不能再增加新的属性。”),Object.sealObject.freeze 办法能够解冻一个对象。一个被解冻的对象再也不能被批改;解冻了一个对象则不能向这个对象增加新的属性,不能删除已有属性,不能批改该对象已有属性的可枚举性、可配置性、可写性,以及不能批改已有属性的值。此外,解冻一个对象后该对象的原型也不能被批改。freeze() 返回和传入的参数雷同的对象。”) 办法都能够标记一个对象为不可扩大(non-extensible)。

Object.isExtensible(1);
// false

待续。。

正文完
 0