函数表达式
函数声明:
function a(){ ... }
函数表达式:
var a = function() {...}
区别:函数声明可以先使用,再定义
函数表达式只能先定义,再使用。
构造函数模式
function Person(name,age){
this.name = name;
this.age = age;
this.sayName = function(){
console.log(this.name);
}
}
实例化:var person = new Person('sb',18);
使用:person.sayName();//sb
构造函数命名时应该用首字母大写;
构造函数模式里的this指向的是实例化后的对象,即:指向的是person而不是Person
构造函数一般不使用return,一旦使用,有可能会改变他的返回值类型
构造函数用new来调用,普通函数不用
构造函数存在得问题有:
性能不好,当我们需要一万个对象,那就得New一万次,而且,用这种方法构造的不同实例上的同名函数是不相等的。
工厂模式
function Person(name,age){
var obj = new Object();
obj.name = name;
obj.age = age;
obj.sayName = function(){
return obj.name
};
return obj;
}
var a1 = Person('he',9);
console.log(a1.sayName());
深拷贝和浅拷贝
深拷贝:
JSON.stringify和JSON.parse属于深拷贝,前后是相互独立的
浅拷贝:
即引用,前后是有关联的,一个地方的变化会导致另一处也发生改变。
原型
函数有prototype原型属性。指向对象。
用function定义的对象有prototype属性,但是用new生成的对象没有这个属性!,不过New生成的对象有一个内置的原型对象,在new时就被设置为了构造函数的prototype属性引用的那个原型对象。
prototype属性又指向了一个prototype对象,注意prototype属性与prototype对象是两个不同的东西,要注意区别。在prototype对象中又有一个constructor属性,这个constructor属性同样指向一个constructor对象,而这个constructor对象恰恰就是这个function函数本身。
JS 使用new 生成新对象的步骤:
1.第一步是建立一个新对象(叫A吧);
2.第二步将该对象(A)内置的原型对象设置为构造函数(就是Person)prototype 属性引用的那个原型对象;
3.第三步就是将该对象(A)作为this 参数调用构造函数(就是Person),完成成员设置等初始化工作。
其中第二步中出现了一个新名词就是内置的原型对象,注意这个新名词跟prototype对象不是一回事,为了区别我叫它inobj,inobj就指向了函数Person的prototype对象。在person的prototype对象中出现的任何属性或者函数都可以在one对象中直接使用,这个就是javascript中的原型继承了。
JS的继承
function A(){
this.name = 'hello'
}
A.prototype.action = function() {
// body...
console.log("吃饭,睡觉,打豆豆");
};
function B(){}
B.prototype = new A();
let Aa = new A();
let Bb = new B();
Aa.action();
Bb.action();
console.log(Bb.name)
把A给B的prototype,B就继承了A的方法。
传参
function Person(name,age) {
this.name = name;
this.age = age;
}
Person.prototype.getName = function () {
return this.name;
}
function Son() {
Person.call(this,'hacuocuo',17); //子类调用父类,并且进行传参
this.name = 'sons'
}
Son.prototype = new Person();
Son.prototype.getSonName = function () {
return this.name;
}
var aa = new Son();
此时aa的name为sons,age为17;
age是传参生成的,name是实例里写的,而不是参数
作用域
可以理解为变量起作用的区域
AJAX
几种请求类型:
get:改
post:增
put:编辑
delete:删
如何让a标签不跳转
<a href="javascript:;"></a>
网友评论