1. 程式人生 > >js 對象與json的區別和this 指向問題

js 對象與json的區別和this 指向問題

undefined 特殊 關鍵字 末尾 var con object 操作符 eth

構造函數。用來被new關鍵字調用的函數,這個函數返回指定屬性的對象。
用new關鍵字來調用函數
new是是一個操作符,使用new操作符調用函數的時候,此時將會發生4個事情:
(1)創建一個空對象
(2)把函數內部的this指向這個空對象
(3)將順序函數執行裏面的語句
(4)返回這個對象
function fun(){
name : "小花" ,
age : 18 ,
sex : "女",
}
var xiaoming = new fun();
console.log(xiaoming);
//fun {name: "小花", age: 18, sex: "女"}
javascript基礎之對象
對象只是帶有屬性和方法的特殊數據類型


javaScript 有內置對象比如 String、Date、Array 等等。
1:用字面量的方式創建,使用{}當做界定符號,裏面用k-v對兒羅列所有屬性
var obj = {
name : "小花" ,
age : 18 ,
sex : "女",
sayHello : function(){
console.log("我是" + this.name);
}
}
對象就是屬性的無序集合
2:訪問對象的屬性
objectName.propertyName
objectName["propertyName"]
訪問對象的方法
objectName.methodName()
var obj = {
name : "小花" ,

age : 18 ,
sex : "女",
sayHello : function(){
console.log("我是" + this.name);
}
}
console.log(obj.name);
console.log(obj[‘name‘]);
console.log(obj.sayHello);
console.log(obj[‘sayHello‘]);
console.log(obj.sayHello());
//小花
//小花
//函數
//函數
//我是小花
3:對象的字面量和JSON的關系
JSON沒有聲明變量這一說(JSON中沒有變量的概念)
JSON末尾沒有分號{}後面
JSON要求所有的鍵必須有雙引號(單引號不行),而對象字面量不要求(當鍵的名字不符合標識符名字的時候必須加上雙引號,英語字母、數字、_、$ ,不以數字開頭)。

4:this
關鍵字
指向的是調用函數的那個對象
和調用有關和定義無關
(1)當用()調用的時候,指向的是window
function myfunction(){
console.log(this);
}
myfunction();
//Window {external: Object, chrome: Object, document: document, _ASYNC_START: 1500782356654, _chrome_37_fix: undefined…}
(2)dom元素事件處理程序的時候,指向的是dom對象
function myfunction(){
console.log(this);
}
div.onclick=myfunction;
//div
(3)當函數被setInterval、setTimeout調用的時候,函數裏面的this是window對象
setInterval(myfunction,2000);
(4)當函數被當做某個對象屬性被調用的時候,此時這個函數裏面的this指的是這個對象
var obj = {
name : "小花" ,
age : 18 ,
sex : "女",
sayHello : function(){
console.log("我是" + this.name);
}
}
obj.sayHello();
(5)call和apply方法可以任意設置函數裏面的this
函數.call(對象);
函數.apply(對象);
函數立即執行,且函數內部的this指向對象。
區別是傳參:
sum.call(obj,1,2,3); // call必須要用逗號羅列所有參數
sum.apply(obj , [1,2,3]); // apply用數組羅列所有參數
(6)new 調用的函數。
this指的是系統內部創建的新對象

js 對象與json的區別和this 指向問題