JS核心

【JavaScript核心】
from:http://weizhifeng.net/javascript-the-core.html#constructor

1.原型链
①如果一个属性或方法在对象自己中没有找到,就进入原型链中寻找,直到Object.prototype,若仍未找到,返回undefined。

var a = {
x: 10,
calculate: function(z){
return this.x+this.y+z;
}
};
var b = {
y: 20,
__proto__: a
};
var c = {
y :30,
__proto__: a
};
b.calculate(40);//70=10+20+40
c.calculate(50);//90=10+30+50

2.构造函数:自动为新创建的对象设置一个原型对象。(不需要人工为一个对象设置[[proto]]属性)

function f1(y){
this.y = y;
}
f1.prototype.x = 10;
f1.prototype.calculate = function(z){
return this.x + this.y + z;
};
var b = new f1(20);
var c = new f1(30);
b.calculate(40);//70=10+20+40
c.calculate(50);//90=10+30+50

3.执行上下文栈:以栈的形式(先进后出),第一个进入栈的是Global EC(Execution Context)全局上下文,也就存在于栈的最底层。活动上下文(AC:Activation Context)存在于栈的顶层。

4.执行上下文(EC)

这里写图片描述

5.几个例子

var x = 10;
(function foo(){
var y = 20;
(function bar(){
var z = 30;
console.log(x+y+z);//60=10+20+30
})();
})();
Object.prototype.x = 10;
var a =20;
var b = 30;
console.log(x);//10
(function foo(){
var a = 40;
var x = 50;
with({z:60}){
//这里的x直接指向Object.prototype.x=10
//{z:60}从Object.prototype 继承而来
console.log(x,a,b,z);//10,40,30,60
}
console.log(x,a);//50,40
console.log(window.a);//20
})();
var x = 20;
function foo(){
var x = 10;
return function bar(){
//x是自由变量
console.log(x);//10
};
}
var returnedFunction = foo();
returnedFunction();
var x = 10;
function foo(){
    //这里输出的x静态绑定了运行之前的父作用域链,也就是Global变量中的x:10
    console.log(x);
}
(function (funArg){
    var x = 20;
    funArg();
})(foo);//10
function foo(){
var x = 1;
return {
bar: function bar(){
console.log(++x);
},
baz: function baz(){
console.log(--x);
}
};
}
var help = foo();
help.bar();//2
//x相关于一个引用",在其变化的基础上变化,而不是原始状态
help.baz();//1
help.baz();//0
help.bar();//1

6.
①原型链:从内往外(Object.prototype)寻找对象的属性。
②作用域链:从内往外(Global变量对象)寻找变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值