【Javascript】Object.prototype
几乎所有的 JavaScript 对象都是 Object 的实例;一个典型的对象继承了Object.prototype的属性(包括方法)。
存在两种不具备原型链的创建Object的方法:Object.create(null)和Object.setPrototypeOf(obj, null)。
- 通过Object.create(null)创建的对象没有prototype:
var a = Object.create(null);
var b = {}
console.log(a); // 没有prototype
console.log(b); // 有prototype
- 通过设置对象的原型链为null
var a = {}
Object.setPrototypeOf(a, null);
console.log(a);
在Object的原型链上创建的函数,可以被所有Object实例对象调用:
var b = {}Object.prototype.testfn = function (val) {console.log("在原型链上创建函数,参数值为" + val);
}
b.testfn(123); // 在原型链上创建函数,参数值为123
改变Object原型,会通过原型链改变所有对象;除非在原型链中进一步覆盖受这些变化影响的属性和方法。这提供了一个非常强大的、但有潜在危险的机制来覆盖或扩展对象行为。
属性:
- Object.prototype.constructor
特定的函数,用于创建一个对象的原型。 - Object.prototype.proto
指向当对象被实例化的时候,用作原型的对象。 - Object.prototype.noSuchMethod
当未定义的对象成员被调用作方法的时候,允许定义并执行的函数。
属性:Object.prototype.constructor
所有对象都会从它的原型上继承一个 constructor 属性:
var o = {};
o.constructor === Object; // truevar o = new Object;
o.constructor === Object; // truevar a = [];
a.constructor === Array; // truevar a = new Array;
a.constructor === Array // truevar n = new Number(3);
n.constructor === Number; // true
constructor可修改。
属性:Object.prototype.proto(已废弃)
该特性已经从 Web 标准中删除,虽然一些浏览器目前仍然支持它,但也许会在未来的某个时间停止支持,请尽量不要使用该特性。
.__proto__属性是Object.prototype 一个简单的访问器属性,其中包含了get(获取)和set(设置)的方法,任何一个__proto__的存取属性都继承于Object.prototype,但一个访问属性如果不是来源于Object.prototype就不拥有.__proto__属性,譬如一个元素设置了其他的.__proto__属性在Object.prototype之前,将会覆盖原有的Object.prototype。
方法:
- Object.prototype.defineGetter()【已废弃】
关联一个函数到一个属性。访问该函数时,执行该函数并返回其返回值。 - Object.prototype.defineSetter()【已废弃】
关联一个函数到一个属性。设置该函数时,执行该修改属性的函数。 - Object.prototype.lookupGetter()【已废弃】
返回使用 defineGetter 定义的方法函数 。 - Object.prototype.lookupSetter()【已废弃】
返回使用 defineSetter 定义的方法函数。 - Object.prototype.hasOwnProperty()
返回一个布尔值 ,表示某个对象是否含有指定的属性,而且此属性非原型链继承的。 - Object.prototype.isPrototypeOf()
返回一个布尔值,表示指定的对象是否在本对象的原型链中。 - Object.prototype.propertyIsEnumerable()
判断指定属性是否可枚举,内部属性设置参见 ECMAScript [[Enumerable]] attribute 。 - Object.prototype.toSource()
返回字符串表示此对象的源代码形式,可以使用此字符串生成一个新的相同的对象。 - Object.prototype.toLocaleString()
直接调用 toString()方法。 - Object.prototype.toString()
返回对象的字符串表示。 - Object.prototype.unwatch()
移除对象某个属性的监听。 - Object.prototype.valueOf()
返回指定对象的原始值。 - Object.prototype.watch()
给对象的某个属性增加监听。
方法:Object.prototype.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性(也就是,是否有指定的键)。
const object1 = {};
object1.property1 = 42;console.log(object1.hasOwnProperty('property1'));
// expected output: trueconsole.log(object1.hasOwnProperty('toString'));
// expected output: falseconsole.log(object1.hasOwnProperty('hasOwnProperty'));
// expected output: false
所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,hasOwnProperty()方法会忽略掉那些从原型链上继承到的属性。(for…in…会遍历出包括继承得到的属性。)
var obj = {prop1: 123
}
var a = Object.create(obj);
a.prop2 = 666;
for (var key in a) {console.log(key, a[key], a.hasOwnProperty(key)); // prop2 666 true; prop1 123 false
}
方法:Object.prototype.isPrototypeOf()
isPrototypeOf() 方法用于测试一个对象是否存在于另一个对象的原型链上。
isPrototypeOf() 与 instanceof 运算符不同。在表达式 "object instanceof AFunction"中,object 的原型链是针对 AFunction.prototype 进行检查的,而不是针对 AFunction 本身。
语法:
prototypeObj.isPrototypeOf(object)
在object对象的原型链上搜寻是否有prototypeObj。
⚠️注:如果 prototypeObj 为 undefined 或 null,会抛出 TypeError。
var a = {}
var b = Object.create(a);
var c = {}console.log(a.isPrototypeOf(b)); // true
console.log(a.isPrototypeOf(a)); // false
方法:Object.prototype.propertyIsEnumerable()
语法:
obj.propertyIsEnumerable(prop)
每个对象都有一个 propertyIsEnumerable 方法。此方法可以确定对象中指定的属性是否可以被 for…in 循环枚举(也就是自定义的属性),但是通过原型链继承的属性除外。如果对象没有指定的属性,则此方法返回 false。
var obj = {prop1: 123
}
var a = Object.create(obj);
a.prop2 = 666;for (var key in a) {console.log(key, a[key], a.propertyIsEnumerable(key)); // prop2 666 true; prop1 123 false
}
方法:Object.prototype.toSource()
⚠️注:该特性是非标准的,请尽量不要在生产环境中使用它。
在谷歌浏览器里试了下,发现会直接报错:
Uncaught TypeError: obj.toSource is not a function
方法:Object.prototype.toLocaleString()
直接调用 toString()方法。
语法:
obj.toLocaleString();
表示对象的字符串。
var a = ["1", "2", "3"]
var b = true;console.log(a.toLocaleString()); // "1,2,3"
console.log(b.toLocaleString()); // "true"
方法:Object.prototype.toString()
var a = ["1", "2", "3"]
var b = true;console.log(a.toString()); // "1,2,3"
console.log(b.toString()); // "true"
方法:Object.prototype.watch()
警告 : 请尽量避免使用 unwatch() 和 watch() . 这两个方法仅在 Gecko 中实现 , 并且他们过去主要作调试用. 另外, 使用 watchpoints 对性能有一系列的副面影响 ,特别是当使用全局对象,如 window. 你应该使用 setters and getters 或 proxies 来替代.
watch() 方法会监视属性是否被赋值并在赋值时运行相关函数。
语法:
obj.watch(prop, handler)
试了一下,在谷歌浏览器里会直接报错:
Uncaught TypeError: o.watch is not a function
方法:Object.prototype.unwatch()
unwatch() 删除一个 watch() 设置的 watchpoint.
语法:
obj.unwatch(prop)
同上watch报错
方法:Object.prototype.valueOf()
valueOf() 方法返回指定对象的原始值。
语法:
object.valueOf()
var a = []
var b = {}
var c = false
var d = "123"
var e = new String("123")console.log(a.valueOf() === []) // false
console.log(b.valueOf() === {}) // false
console.log(c.valueOf() === false) // true
console.log(d.valueOf() === "123") // true
console.log(d.valueOf() === e) // false
【Javascript】Object.prototype相关推荐
- 【javaScript】Object.prototype.toString.call() 、 instanceof 以及 Array.isArray() 区别与优化层面的比较
1. Object.prototype.toString.call() 每一个继承 Object 的对象都有 toString 方法,如果 toString 方法没有重写的话,会返回 [Object ...
- 【js】Object.prototype.hasOwnProperty()
hasOwnProperty() 方法会返回一个布尔值,指示对象自身属性中是否具有指定的属性 例如:obj.hasOwnProperty(prop) 1. 所有 Object 的对象都会有 hasOw ...
- 【JavaScript】Object.observe()带来的数据绑定变革
Object.observe()带来的数据绑定变革 引言 一场变革即将到来.一项Javascript中的新特性将会改变你对于数据绑定的所有认识.它也将改变你所使用的MVC库观察模型中发生的修改以及更新 ...
- 【JavaScript】阶段性复习
[JavaScript]阶段性复习 View / MVVM 框架 对比 React .Angular 和 Vue 相同点 不同点 如何实现一个组件,前端组件的设计原则是什么? Vue computed ...
- 【JavaScript】类数组详解
[JavaScript]类数组详解 文章目录 [JavaScript]类数组详解 什么是类数组 类数组转换成数组 ES6 的方法转数组 callee属性 箭头函数没有arguments HTMLCol ...
- 【JavaScript】出现即使设置了ID也获取不到的可能原因与window.onload
有时候.在JavaScript中.即使设置了ID也有可能出现document.getElementById()获取不到的情况,然后你就開始想document是否写错之类的.事实上根本就不是你的代码的大 ...
- 【Javascript】深入理解this作用域问题以及new/let/var/const对this作用域的影响
理解this作用域 <javascript高级程序设计>中有说到: this对象是在运行时基于函数的执行环境绑定的:在全局函数中,this等于window,而当函数被作为某个对象调用时,t ...
- Number()函数转换‘单个数值的数组‘为何是数字?【JavaScript】
Number()函数转换'单个数值的数组'为何是数字?[JavaScript] 1.Number() 熟悉Number()函数的同学可跳过项 使用Number函数,可以将任意类型的值转化成数值. 原始 ...
- 【JavaScript】慢慢进入javascript的大门~~~
[Javascript]慢慢进入javascript的大门~~~ JavaScript入门 一.基本概念: 01. 是什么? 02. 浏览器怎么执行? 03. JS的组成 04. JS的书写位置 二. ...
最新文章
- 基于DoG的特征检测子(SIFT)_学习笔记
- mysql取消外码约束_MySQL 关闭子表的外键约束检察方法
- 05.elasticsearch-index相关总结
- python eel 多线程_利用Eel使JavaScript调用Python程序
- Redis Cluster 集群模式原理和动态扩容
- 在博客园的博客插入代码块(高亮、行号、缩进、着色)
- android+清除循环动画,android - 如何使用ViewPropertyAnimator生成循环动画?
- [转]numpy中的np.max 与 np.maximum区别
- linux系统C语言实现域名解析功能
- rust建的怎么拆除_罗志祥私建泳池已拆除,后续还将接受物业的监督与教育
- STL: string:erase
- sqlserver 没有备份误删数据_数据库服务器如何备份详细教程!
- oracle日期时间
- [置顶] 原创鼠标拖动实现DIV排序
- 金蝶k3服务器物理内存过高,金蝶k3提示超出内存解决方案
- 为什么我们需要PRINCE2认证——上海信息化培训中心
- java 1/2等于多少_1/2-2等于多少?
- 层次分析法在matlab上的实现
- linux+中的su命令,Linux中如何使用SU命令(示例)
- 【python】python基础与unittest基础