-
针对数组的添加和删除操作
查看全部 -
关于Object.creat
var o={f:function(){retrun this.a+this.b }};
var p=Object.creat(o);
这里的p和o的关系是什么?
p的原型指向o的prototype,Object.create()创建对象是指基于原有对象的原型创建一个新对象,新对象为空对象,新对象继承元对象的属性,位于新对象的原型上。
查看全部 -
创建对象
方法1:(字面量)
var a={x:1,y:2}
var b={x:1,y:2,
z:{ n:3,m:4<br> }}
方法2,(new/原型链)
通过new function foo(){}//创建一个函数对象 foo.prototype.z=3;//这个函数对象默认带一个prototype的属性;
方法3,(Object.create)
查看全部 -
JavaScript严格模式的语法限制
查看全部 -
javascript运算符优先级
查看全部 -
javascript表达式类型
查看全部 -
严格模式
查看全部 -
表达式
查看全部 -
查看全部
-
类型测试小结
查看全部 -
严格模式 'use strict'
不允许为声明的变量
不允许with
arguments不能改变参数的值,对象除外
不允许delete,参数,函数名以及不可配置的属性参数
不允许八进制字面量
不允许eval、arguments作为函数名,变量名
eval拥有独立作用域
查看全部 -
instanceof:左边对象的原型链上是否有右边构造函数的prototype属性
查看全部 -
//1、全局的this(浏览器),相当于window
console.log(this.document === document); //true
console.log(this === window); //true
this.a = 12;
console.log(window.a); //12
//2、一般函数的this(浏览器)
function f1(){
return this; //this指向全局对象,在浏览器中就是window
}
console.log(f1()); //window
function f2(){
"use strict"; //在严格模式下,this是undefined
return this;
}
console.log(f2()); //undefined
//3、作为 对象方法 的函数的this
var obj = {
prop: 37,
f: function(){ //函数作为obj对象的属性f的值,即作为对象的方法
return this.prop; //此时this指向对象obj
}
}
console.log(obj.f()); //37
//另一种形式
var obj1 = {prop: 37}; //先定义一个对象
function foo(){ //在定义一个函数
return this.prop;
}
//如果直接调用 foo()方法,this返回的是浏览器对象window
//当把函数foo()赋值给对象obj1的属性f时,作为obj1对象的方法,this指向的是对象obj1
obj1.f = foo;
console.log(obj1.f()); //37
//4、对象原型链上的this
var obj2 = {
f: function(a,b){ //函数作为对象obj2上的方法f的值
return this.a + this.b;
}
}
//以obj2为原型创建一个对象p
var p = Object.create(obj2);
p.a = 1; //创建对象p的属性a和b
p.b = 2;
console.log(p.f()); //f()是原型上的方法,当p调用f()时,this指向对象p,可以取到属性a和b的值
//5、get/set方法与this
function add(){ //定义函数add()
return this.a + this.b;
}
var o = { //创建对象,有一个get方法
a: 2,
b: 3,
get mult(){
return this.a * this.b;
}
}
Object.defineProperty(o,'add',{ //在对象上添加add()方法
get: add,
enumerable: true, //enumerable必须为true,才能在对象上添加方法
configurable: true //configurable必须为true,才能在对象上添加方法
})
console.log(o.mult); //6 this指向对象o
console.log(o.add); //5 上面已将add()添加进对象o中,相当于 对象的方法,所以add()函数中的this指向o
//6、构造器中的this
function C1(){
this.a = 1;
}
//C1(); 直接调用函数的话,this返回window
//以C1为原型创建对象o1,C1()构造器中没有return,this作为返回值。
var o1 = new C1();
console.log(o1.a); //this作为返回值,即o1.a = this.a = 1
function C2(){
this.a = 1;
return {a:2}; //构造器中有return语句,且返回一个对象{a:2},则此对象作为返回值
}
var o2 = new C2(); //以C2作为原型创建对象o2
console.log(o2.a); //调用原型上的属性a时,返回值不是this,而是对象{a:2},所以 o2.a = 2
//7、call/apply方法与this
function add(c,d){
return this.a + this.b + c + d;
}
var o3 = new add();
o3.a = 1;
o3.b = 2;
//调用call和apply方法时,第一个参数必须是对象,让add()函数中的this指向该对象
var num1 = add.call(o3,3,4); //3,4相当于参数c,d传入add(c,d)方法中
console.log(num1); //1+2+3+4=10
var num2 = add.apply(o3,[8,9]); //apply和call的区别是,传进去的是数组
console.log(num2); //1+2+8+9=20
查看全部 -
查看全部
举报