继承
一圣杯模式:
-
Father.prototype.lastName=“laodeng”
function Father(){} function Son(){ } function inherit(Target,Origin){ function F(){} F.prototype = Origin.prototype; Target.prototype = new F(); Target.prototype.constructor=Target; Target.prototype.uber = Origin.prototype; } Son.prototype.sex="male"; inherit(Son,Father); son = new Son(); father = new Father();
2.(雅虎)
var inherit = (function(){
var F = function(){};
return function inherit(Target,Origin){
F.prototype = Origin.prototype;
Target.prototype = new F();
Target.prototype.constructor=Target;
Target.prototype.uber = Origin.prototype;
}
}());
//Son的改变不会改变Father
二、
var Deng = {
drink : function(){
console.log(“hejiu”);
return this;
},
prim: function(){
console.log(“tangtou”);
return this;
},
smoke: function(){
console.log("smoking");
return this
},
}
Deng.drink().prim().smoke();
类似于jq连续调用
三 对象的引用
var a = {name:“abs”,}
a. name就等于 a[‘name’]
实例:var deng = {
wife1:{name:“wang”},
wife2:{name:“liu”},
wife3:{name:“zhang”},
Call:function(num){
return this[‘wife’+num]
}
}
Deng.Call(1);
四、遍历对象
var deng = {
name: “laowang”,
age:1,
wife:“xiaoliu”
}
for(var i in deng){
console.log(deng[i]);
}
/* for(var i in deng){
console.log(deng[‘i’]);//—>underfine
//把deng.i中的i认为是对象中属性,但属性中中没有i属性
} /
五
in hasOwnProperty instanceof
var deng = {
name: “laowang”,
age:1,
wife:“xiaoliu”,
proto:{
lastName:“laowang”
}
}
1. for(var i in deng){
if(deng.hasOwnProperty(i))
{
console.log(deng[i]);
}
}
输出:laodeng
1
xiaoliu
laowang
2.
for(var i in deng){
console.log(deng[i]);
}
输出:laodeng
1
xiaoliu
3. A instanceof B
A的原型链上有没有B的原型
例如: obj={
}
var a=new obj();
返回 true;
六 typeof返回值类型
boolean
number
string
underfined
object
function
七 五大原始值
Number、Stirng、Boolean、Null、Underfined
八
UnderfinedNull
但是 Underfined=Null 不成立
isNaN(“100”)返回true —>括号里面的内容先Number(“num”)
parseInt(“1a”) 返回1
parseInt(“a”) 返回NaN;
parseInt(2,8)------->2是一个八进制数
九 callee 返回函数本身
var num = (function(i){
if(i==1)
{
return 1;
}
return iarguments.callee(i-1);
}(10))
十 caller 返回谁调用的此函数
function test(){
deom();
}
function deom(){
console.log(deom.caller);
}
test();
输出:
十一 数组的方法
//改变原数组
arr.push(1)//从数组后面添加元素
arr.pop()//从后面弹出一个元素
arr.unshift(0)//从前面增加一个元素
arr.shift()//从前面删除一个元素
arr.reverse()//数组逆置
arr.splice(从第几位开始,多少个元素,需要增加的元素)//第三位可不写
arr.sort(function(a, b){
return b-a;
});//逆序
arr.sort(function(a, b){
return a-b;
});//正序
arr.sort(function(){
return Math.random()-0.5;
});//乱序
。。。。。。。。。。。。。。。。。。。。。
将对象按年龄升序
var deng = {
name:deng,
age:40,
}
var liu={
name:liu,
age:30,
}
var shi={
name:shi,
age:19
}
var arr=[deng,shi,liu];
arr.sort(function(a,b){
return a.age-b.age;
})
改变原数组
str.slice(开始截取的位置,截取的长度)//需要有变量接受返回值,如果只有一
arr.join(‘符号’)位,则一直截取到最后
arr.split(‘按这个符号截取’)
十二 cesium一个字符串的字节数
function retBt(str){
var num = str.length;
for(var i=0;i<str.length;i++){
if(str.charCodeAt(i)>255)
num++;
}
return num;
}
str=‘ni好’;
retBt(str);
十三 数组去重
Array.prototype.unique = function (){
var temp = {},
arr = [],
len = this.length;
for(var i = 0;i < len;i++){
if(!temp[this[i]]){
temp[this[i]] = “abc”;
arr.push(this[i]);
}
}
return arr;
}
var arr=[1,2,3,3,2,4,1];//数组去重
十四 预编译的环节
预编译:
1.生成AO
2.将形参名当作对象的属性名
3.实参形参相统一
4.将function提升