Object.prototype

方法:

  1. hasOwnProperty 概念:用来判断一个对象中的某一个属性是否是自己提供的(主要是判断属性是原型继承还是自己提供的) 语法:对象.hasOwnProperty('属性名')
            var o = { name: 'jim' };
function Person() {
this.age = 19;
this.address='北京';
this.work='上海';
}
Person.prototype = o; var p = new Person(); console.log( p.hasOwnProperty( 'name' ) ); // false 这个 name 属性不是自己提供的 console.log( p.hasOwnProperty( 'age' ) ); // true 这个 nage 属性是自己提供的 //for in 遍历对象时 有时希望遍历的是对象自己提供的成员而不是从原型那里继承的
for(var k in p){
if(p.hasOwnProperty(k)){
console.log(k);
}
}

  1. isPrototypeOf 概念:判断是不是对象的原型 ;前面这个对象是否在后面这个对象的原型链上 语法:对象.isPrototypeOf(对象)
            var o = { name: 'jim' };
function Person() {
this.age = 19;
this.address='北京';
this.work='上海';
}
var p1 = new Person();
Person.prototype = o; var p2 = new Person(); console.log( o.isPrototypeOf( p1 ) ); //false o 不是 p1 的原型
console.log( o.isPrototypeOf( p2 ) );//true o 是 p2 的原型 console.log( Object.prototype.isPrototypeOf( p1 ) );//true Object.prototype 在 p1 的原型链上
console.log( Object.prototype.isPrototypeOf( p2 ) );//true Object.prototype 在 p2 的原型链上

  1. propertyIsEnumerable 概念:判断对象的某一个属性是不是自己提供的( 与 hasOwnProperty 一样 ), 同时该属性要求可枚举( for-in 遍历出来) 4.补充:(获得对象类型的方法 typeof) toString 用法:Object.prototype.toString.call(对象)->[Object 构造函数名]

Function.prototype

方法: 1.apply call 用法:上下文调用模式,自定义设置this的含义

语法: 函数名.apply(对象,[参数]) 函数名.call(对象,参数)

描述:

  1. 函数名就是表示函数本身,使用函数进行调用的时候默认this 就是全局变量

  2. 函数名是方法时,this是指当前对象

  3. 使用apply调用后,无论是函数还是方法this都由apply的第一个参数决定

注意:

  1. 如果函数或方法中没有this的操作,无论什么调用都一样

  2. 如果是函数调用foo(),有点像foo.apply(window)

  3. 如果是方法调用o.method(),有点像o.method.apply(o)

参数问题:如果函数或方法无参数时,用call或是apply都一样

第一个参数的使用规则:

  1. 如果传入的是一个对象,就是设置该函数或方法中的this指向这个对象
        var func2 = function() {
this.name = "程序员";
};
var o={name:'xjj'};
func2.apply(o);
console.log(o.name);// 程序员

  1. 如果不传参或传入为null undefined等 this默认为window

  2. 如果传入的是基本数据类型,this就指向这个基本类型对应的包装类型的引用

第二个参数:在使用上下文调用时,如果原函数或方法有参数,那么就使用第二个参数来表示

应用:上下文调用只是能修改this,但是最多使用的是借用函数调用

        var a = {};
a[ 0 ] = 'a';
a[ 1 ] = 'b';
a.length = 2;
var arr=[];
var newArr=arr.push.apply(arr,a); push 返回所加元素的个数,newArr=2;arr=["a", "b"]
a是一个伪数组,无法使用数组的方法,
处理数组转换,可以使用apply将数组或伪数组展开的特性,将元素一个一个取出来构成一个新数组

在来一个例子:

        var a = { length: 0 };
a[ a.length++ ] = 'abc';
a[ a.length++ ] = 'def';
var arr=[];
var newArr=arr.slice.apply(a,[0]); 结果为:
newArr=["abc", "def"];
slice语法:
arr.slice( index, endIndex ) 从index开始,endIndex取不到 返回的是截取到元素
如果第二个参数不传, 那么就是 从 index 一致获取到结尾,该方法不会修改原数组

2.caller 概念:一般不推荐使用. 获得函数的调用者.

3.bind 概念:绑定, 这个语法来源于 ES5

        var f = document.getElementById;
f( 'id' ); //这样会报错 非法调用
f.call( document, 'id' ); 或者换一种方式:
var f = document.getElementById.bind( document );
f( 'id' ); //这样不会报错

  1. instanceof 运算符 概念:判断对象是不是由指定构造方法所创建或者说构造函数的原型属性是否在对象所在的原型链上. 语法: 对象 instanceof 函数 描述: '函数.prototype' 是否在 '对象' 的原型链上

         function Person() {}
    var p = new Person(); console.log( p instanceof Person );//true

     function Person(){};
    var p1=new Person();
    Person.prototype={};
    var p2=new Person(); console.log(p1 instanceof Person); //false Person.prototype不在 p1 的原型链上
    console.log(p2 instanceof Person); //true Person.prototype在 p2 的原型链上

Object.prototype和Function.prototype一些常用方法的更多相关文章

  1. Object.prototype 与 Function.prototype 与 instanceof 运算符

    方法: hasOwnProperty isPrototypeOf propertyIsEnumerable hasOwnProperty 该方法用来判断一个对象中的某一个属性是否是自己提供的( 住要用 ...

  2. 一起Polyfill系列:Function.prototype.bind的四个阶段

    昨天边参考es5-shim边自己实现Function.prototype.bind,发现有不少以前忽视了的地方,这里就作为一个小总结吧. 一.Function.prototype.bind的作用 其实 ...

  3. 理解javascript中的Function.prototype.bind

    在初学Javascript时,我们也许不需要担心函数绑定的问题,但是当我们需要在另一个函数中保持上下文对象this时,就会遇到相应的问题了,我见过很多人处理这种问题都是先将this赋值给一个变量(比如 ...

  4. 关于Function.prototype.apply.call的一些补充

    宿主对象,在javascript中有三类对象,本地对象,内置对象和宿主对象.其他两类暂且不提,宿主对象是指什么呢(DOM BOM),控制台对象是文档对象模型的扩展,也被认为是宿主对象.那么,它们有什么 ...

  5. javascript 一些函数的实现 Function.prototype.bind, Array.prototype.map

    * Function.prototype.bind Function.prototype.bind = function() { var self = this, context = [].shift ...

  6. JS魔法堂:再次认识Function.prototype.call

    一.前言                                大家先预计一下以下四个函数调用的结果吧! var test = function(){ console.log('hello w ...

  7. JavaScript 函数绑定 Function.prototype.bind

    ECMAScript Edition5 IE9+支持原生,作用为将一个对象的方法绑定到另一个对象上执行. Function.prototype.bind = Function.prototype.bi ...

  8. javascript Function.prototype.bind

    语法: fn.bind(obj,arg1,arg2,arg3...) bind是es5新增的方法,顾名思义,它的作用是将函数绑定到某个对象上,就像是某个对象调用方法一样.其本质还是改变了该函数的上下文 ...

  9. javascript中 Function.prototype.apply()与Function.prototype.call() 对比详解

    Function.prototype.apply()|Function.prototype.call() apply()方法可以在使用一个指定的 this 值和一个参数数组(或类数组对象)的前提下调用 ...

随机推荐

  1. es6学习笔记一数组(中)

    接着上一篇,给大家再分享一些数组的其他方法.大家也可以去点击这里学习数组更多的方法 concat方法: 概述:    concat() 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回. ...

  2. Android标题栏上添加多个Menu按钮

    最近项目中碰到要在Android Menu旁边再添加一个按钮,而不是点击menu按钮然后在弹出一些选项. MainActivity代码: public class MainActivity exten ...

  3. C# 将excel表格嵌入到Word中

    C# 将excel表格嵌入到Word中 继续开扒,今天要实现的是使用C#将excel表格嵌入到Word中这个功能,将word表格导入到excel中我已经写过了,如有需要可参考我之前的文章,在开始前还有 ...

  4. Spark入门实战系列--10.分布式内存文件系统Tachyon介绍及安装部署

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Tachyon介绍 1.1 Tachyon简介 随着实时计算的需求日益增多,分布式内存计算 ...

  5. ORA-01439: 要更改数据类型, 则要修改的列必须为空

    此方法有3处update操作,建议根据实际情况的数据量测试评估效率后选用. 思路:定义要更新数据类型的列为[col_old],数据类型为[datatype_old],临时列为[col_temp],数据 ...

  6. Spring配置c3p0数据源时出错报:java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector

    今天在使用Spring配置c3p0数据源时,使用的数据库是mysql,服务器是tomcat,运行时报了一个 java.lang.NoClassDefFoundError: com/mchange/v2 ...

  7. Cesium原理篇:6 Render模块(3: Shader)

    在介绍Renderer的第一篇,我就提到WebGL1.0对应的是OpenGL ES2.0,也就是可编程渲染管线.之所以单独强调这一点,算是为本篇埋下一个伏笔.通过前两篇,我们介绍了VBO和Textur ...

  8. Android中Fragment+ViewPager的配合使用

    官方推荐 ViewPager与Fragment一起使用,可以更加方便的管理每个Page的生命周期,这里有标准的适配器实现用于ViewPager和Fragment,涵盖最常见的用例.FragmentPa ...

  9. 代码的坏味道(2)——过大的类(Large Class)

    坏味道--过大的类(Large Class) 特征 一个类含有过多字段.函数.代码行. 问题原因 类通常一开始很小,但是随着程序的增长而逐渐膨胀. 类似于过长函数,程序员通常觉得在一个现存类中添加新特 ...

  10. 让 select 的 option 标签支持事件监听(如复制操作)

    这标题,让option支持事件监听,应该不难的呀,有什么好讲的? 其实还是有的,默认在浏览器代码是无法直接对option标签进行操作的,不仅包括JS事件监听,还是CSS样式设置 查了一些资料,姑且认为 ...