>  기사  >  웹 프론트엔드  >  Node.js 클로저와 프로토타입

Node.js 클로저와 프로토타입

高洛峰
高洛峰원래의
2016-10-12 14:28:371076검색

js闭包 和 prototype

function test(){
    var p=200;
    function q(){
        return p++;
    }
    return q;
}
var s = test();
alert(s());
alert(s());

 闭包: 在外部访问函数内部的变量:通过函数内部的函数,return 出 函数内部的变量

   原型链继承:

<script type="text/javascript">
 
//定义一个people类,包括eye和hand两个属性,和 run 的方法。
function people(ec,hc){
    this.eye = ec;
    this.hand = hc;
}  
people.prototype.run = function(){
    console.log("人类用" + this.hand + "的腿跑步");
}
 
//定义chin类,调用people 的 call 方法,继承people的 eye 和 hand 属性。
function chin(ec,hc){
    people.call(this,ec,hc);
}
//创造people类的原型副本(此时该原型副本的构造方法是指向people的,所以需要修正该构造方法,改成chin)
var _prototype = Object.create(people.prototype);
_prototype.constructor = chin;
//把chin的原型赋值给 _prototype 。此时 chin 即继承了people的 run方法。但是没有改变people的原型。
chin.prototype = _prototype;
 
//给chin类增加一个 sw方法。
chin.prototype.sw = function(){
    console.log("中国人游泳很厉害");
}
 
var s = new chin("黑眼睛","黄皮肤");
 
console.log(s);
console.log(s.eye);
console.log(s.run());
console.log(s.sw());
 
var p = new people("蓝眼睛","黑皮肤");
console.log(p);
</script>

 结果如下:

Node.js 클로저와 프로토타입

call:

function a(data){
    alert(this.q + data);
}
 
var s = {
    q:100
}
//call的第一个参数是 this,当传入 s 时,即把this 改成了 s ,可以访问 s 内部的变量q 。
a.call(s, 1);

  结果 alert 101

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.