js的prototype属性

 2023-09-18 阅读 19 评论 0

摘要:prototype属性 每一个函数都包含prototype属性,这个属性是指向一个对象的引用,当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性 call和apply方法 以对象a的方法调用函数f() f.call(a); 3 f为函数,a为对象 泛函 我感觉有必要复习一

prototype属性

每一个函数都包含prototype属性,这个属性是指向一个对象的引用,当将函数用作构造函数的时候,新创建的对象会从原型对象上继承属性

call和apply方法

以对象a的方法调用函数f()

f.call(a);
3

f为函数,a为对象

泛函

我感觉有必要复习一下下数学
指定义域为函数,而值域为实数的函数,这样的函数为泛函
至此结束,用js写一下泛函,这也是其函数式编程的基础

function m() {return 2;
}
function f(m) {var f1 = m;f1 = function() {return m.call();}return f1;
}

定义了两个函数,执行一下,第二个函数是将第一个,传入进入的函数

f.apply(m);
function f1()

输入为函数,输出为函数

bind方法

加里化,将多个参数的函数变换成接受一个单一参数的函数

ps 由逻辑学家 哈斯凯尔·加里命名

bind方法,将函数绑定至某个对象,当在函数f()上调用bind方法,并传入一个对象o作为方法,,这个方法将会返回一个新的函数,,将会以函数调用的方式,调用新的函数将会把原始函数f()当做o的方法调用。传入函数的任何实参都会传入新的函数

g = f.bind(o)
等价于
g = o.f
外加参数
g(x) = o.f(x)
function f(y,z) {return this.x + y + z;
};
f.x = 3;
var g = f.bind(f, 3);

好啦,这样就完成了一次加里化
如果不使用this仍可以使用

function f(y,z, e) {return y + z + e;
};var g = f.bind(null, 3, 2);

运行一下

g(3);
8

toString方法

返回源码, 过

Function构造函数

var f = new Function('x', 'y', 'return x + y');
undefined
f;
function anonymous()
f(3,2);
5

function()函数创建的是一个匿名函数
Function()构造函数运行js在运行时动态的创建并编译函数
每次调用Function()构造函数都会解析函数体,并创建新的函数对象,如果在一个循环或者多次调用的函数中执行并构造这个函数则执行效率会受影响
Function()构造函数所创建的不是使用词法作用域,相反,函数体代码的编译会在顶层函数执行。

ps,需要注意最后一点,Function()函数体代码是在顶层函数执行的

可调用的对象

类数组对象不是真正的数组,

var a = {};
for (var i = 0; i<10; i++) {a[i] = i*i;
}

以上生成的数组为类数组对象

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/74770.html

下一篇:钢笔工具

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息