JS函数难点理解
什么是函数?
函数是一种定义一次,即可多次调用的方法。如果函数挂载在一个对象上,如果通过这个对象来调用这个函数时,该对象就是此次调用的上下文(this的值)。函数可以在函数中定义,就会形成闭包。
/** * 闭包实例 * todo 用一个例子展现闭包的基本作用。 */ /*计数 doctest: count(1); >>1 count(1); >>2 count(2); >>3 count(5); >>8 */ var count = (function () { var i = 0 var func = function (x) { if (arguments[0] != null) { i += x; } else { i++ } return i; } return func })(); //加这个可以直接实例化。 /** * 实例化两个对象。每个对象有变量i,且不共享.私有变量 */ var addPrivateValue = function (o, name) { var value = 1; o[‘get‘ + name] = function () { return value; } o[‘set‘ + name] = function (v) { value = v } } o = Object(); addPrivateValue(o, "s"); o.sets("asdf"); o.gets(); /** * 避免变量污染 * * 应用场景 * 如果一个页面,有一个按钮点击切换div的显示或者隐藏. (这个div的内容也在这个方法内定义。) * */ var main_message = (function () { var message = "<div>" + " 测试!这是一个警告" "</div>"; var box = document.createElement("div") document.body.appendChild(box) var show = function () { box.style.display = ‘‘; console.log("hha") } var hide = function () { box.style.display = "None"; } var obj = {} obj.show = show; obj.hide =hide; return obj })();
什么是原型对象?
var Credit = function(){ var name; } //prototype 返回对对象的原型引用。 原型函数会先调用原来的那个方法 与继承还是有区别的。 Credit.prototype.getName = function(){ console.log("Credit"); return this.name } Credit.prototype.setName = function(name){ console.log("Credit"); this.name = name; } var NewCredit = function(){ } NewCredit.prototype.getName = function(){ console.log("NewCredit"); return this.name } NewCredit.prototype.setName = function(name){ console.log("NewCredit"); this.name = name; } NewCredit.prototype = new Credit(); var c = new NewCredit(); c.setName("adf");//这个会输出Credit c.getName();
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。