javaScript面向对象
js解析过程:
- 全局:
- 预处理阶段 :
- 先扫描函数声明后扫描变量(var声明)
- 处理函数声明有冲突,会覆盖
- 处理变量声明时有冲突,会忽略
- 先扫描函数声明后扫描变量(var声明)
- 执行阶段
- 测试
- 函数
- 预处理阶段
- 每调用一次,产生一个LexicalEnvironment
- 先函数的参数
- 一些语言提供的对象,比如arguments等
- 参数有传,那么就有值,没有就是undefined
- 如果多个函数参数名字一样,那么最后一个的优先级最高
- 内部声明式函数
- 内部var变量
- 冲突情况与全局处理一样
- 每调用一次,产生一个LexicalEnvironment
- 执行阶段
- 给预处理阶段的成员赋值
- 如果没有用var声明的变量,会成为最外部LexicalEnvironment的成员
总结javascript OOP 创建对象
面向对象,创建对象。健值对。
属性名可以为字符串。
一、 js的两大特性:
1、弱类型
2、动态性
弱类型的编程语言,比如javascript,ruby
var a = 5;
a = "abcd";
动态性:运行时可变化,比如对象可以动态的添加成员
var a = {};
a.name = "zss"; //属性 ps:创建时没有属性。
a.work = function(){
alert(this.name);
}
a.work();
二、instanceof:运算符用来判断一个构造函数的prototype属性所指向的对象是否存在另外 一个要检测对象的原型链上
三、Constructor 构造函数:
//方法名首字母大写。表示不是用来调用方法。是用来创建属性
function Person(name,age){
this.myname = name ;
this.age = age ;
}
var p1 = new Persion("xuewei",18);
p1.length = 18 ;
alert(p1.name);
alert(p1.age)
alert(p1.length);
四、new的简单理解:
自定义对象和构造型函数区别
自定义对象
eg: var xxxx ;
构造型函数
eg:function XXX(name){
}
var aaa = new XXX();
1、构造型函数可以创建多个对象、自定义对象只能有一个
2、构造型函数,函数里可以写代码
一: this
在javascript中this表示:谁调用它,this就是谁.
javaScript是由对象组成的,一切皆为对象,万事皆为对象。this是一个动态的对象,根据调用的对象不同而发生变化,当然也可以call、apply修改this指向的对象。它代表函数运行时,自动生成的一个内部对象,只能函数内部使用
1.1、 JavaScript中函数与方法的区别
在面向过程的语言中我们习惯把完成某个特定的功能的代码块称为“函数”或“过程”,当然过程一般没有返回值。在面向对象语言中我们把对象的功能称为“方法”。把JavaSctipt是种介于面向对象与面向过程中间的语言,同样的方法有时是函数,有时是方法,如下所示
function show(){
console.log("这是一个函数");
}
(function(){
console.log("这是一个函数表达式");
})();
var obj={
show:function(){
console.log(这是一个方法);
}
}
function obj2(){ //obj2是函数,构造函数
this.show=function(){
console.log("这是一个方法,是一个表达式");
}
}
var obj3=new obj2();
第三章:
js处理阶段
一、在预处理的阶段
eg:var a = 1;
function f(){
alert(a);
var a = 5;
}f();
var a = 1;
function f(){
alert(a);
a = 8;
}f();
1.1:读取分析整个源代码
1.2:找出所有用var声明的变量以及用声明的方式创建的函数
1.3:把第二步找出来的东西添加到一个对象里面去(如果是全局代码,这 个对象就是windows)
1.4:如果变量,那么值此时就等于undefined,如果是函数,此时的值就指向函数
全局代码的执行:(在我们的案例里面)
1.1:把a的值从undefined改为1
1.2:调用f函数,以便f函数得到执行
预处理阶段:
1.1:把函数的参数添加到一个对象(词法对象)
1.2:把所有var声明的变量以及声明的形式创建的函数添加到词法对象里面。变量的值就undefined
eg:function f(a,d){ }f(1); //声明的时候参数个数与实际调用时无关
js当中 foreach循环 :eg
var arr= [1,2,3];
for(var a in arr){
alert(arr[a]);
}
js继承
//用过原型继承
var
Object.prototype = parrnt;//这行代码理论上是可以完成的
//但是因为Object.prototype是只读,你不能赋值
//所以不能改
_Proto_和prototype的区别关系
_proto_(隐式原型)与prototyep(显示原型)
_隐式的原型的作用:
构成原型链,同样用于实现基于原型的继承举个例子
当我们需要访问一个学生这个对象中的某个属性,如
果在学生中找不到,那么就会沿着_proto_依次查找。
显示原型的作用:
用于实现基于原型的继承与属性的共享。

浙公网安备 33010602011771号