A. js的函數為什麼也是對象,函數怎麼自定義方法和屬性<js權威指南>中說對象的方法通常是繼承的屬性
這不是很方便嗎?這樣就可以直接被函數做參數傳到需要回調的其他函數中使用,java中的介面調用需要實例化,js就不需要了呀。
函數自定義方法,其實可以把你說的函數看做java中的類。比如:
function Example(name){this.name=name}
Example.prototype.setName=function(name){
this.name=name;
return this;
}
Example.prototype.getName=function(){
return this.name;
}
new Example('name').getName();//name
new Example('name').setName('name1').getName();//name1
無論是js中的Array,String……都有類似的prototype類型描述對象,當這些類型實例化以後可直接調用prototype中定義的方法或屬性,也可覆蓋。在實例化中prototype會被簡單化成__proto__對象,可以通過console.log進行觀察。關於繼承,所有的js對象都有一個頂級的被繼承對象,Object,方法有很多,通常被提到的就是定義類型函數時給prototype賦個你想繼承的類型的實例化object,但這種方法很蠢,自己看書,搜索,實踐吧,手機打字太累了。
B. JS中的String 對象及其屬性(方法)
String 對象用於處理文本(字元串):
參數是要存儲在 String 對象中或轉換成原始字元串的值 ;
通過構造函數的方式也可以把數字類型轉成字元串類型;
let str = new String(123456);
console.log(str);
字面量的方式去創建一個字元串
let str = 'he k'
1、屬性 length 字元串的長度
整個字元串(無論是內部的空格還是外部的空格)都算成長度
console.log(str.length);
字元串有length屬性 也可以被遍歷
for(var i=0;i<str.length;i++){
console.log(str[i]); }
2、 charAt() 返回在指定位置的字元(註:字元串中第一個字元的下標是0)
如果寫的索引位置找不到對應的字元 會返回一個空字元串
let a = str.charAt(6);
console.log(a);
3、concat() 連接字元串
會返回一個新的拼接後的字元串
let newstr = str.concat('itty');
console.log(newstr);
4、 replace() 用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串 ;
replace會把第一參數(第一個參數是屬於原字元串的字元)替換成第二個參數裡面內容
原來的字元串不會受到影響,會返回一個新的替換後的字元串
let str = "hello world";
let a = str.replace('world','kitty');
console.log(a,str);
let str = 'abc123qwe456';
5、/\d/正則表達式 代表字元串裡面的第一個數字替換成nnn
/\d+/ 表示匹配字元串裡面的所有數字當成一個整體替換成nnn
let a = str.replace(/\d+/,'nnn')
因為/\d+/ 這段正則不是全局的,所以只會改變第一個匹配項(123整體)
因為/\d/ 這段正則不是全局的,所以只會改變第一個匹配項(1)
let a = str.replace(/\d/,'n')
想讓str中所有的數字都變成n
正則裡面的g表示全局的意思 str.replace(/\d/g,'n') 可以把字元串裡面的每一個數字都變成n
正則裡面的g表示全局的意思 str.replace(/\d+/g,'n')
把字元串裡面的所有數字當成一個整體都變成n
let a = str.replace(/\d/g,'n')
console.log(a);
sort會對原數組造成影響
let arr = [4,5,1,3]
let newarr = arr.sort();
console.log(arr[0]);
let str = 'abcdefg'
eg: 通過索引找到e charAt方法, 再寫一個字元串 aaaa 拼接到str上 並答應出來新的字元串 , 把abcd替換成hello 並把替換後的字元串列印出來;
let str = 'abcdefg';
console.log(str.charAt(4));
let str2 = 'aaaa';
let newstr = str.concat(str2);
console.log(newstr);
let rstr = str.replace('abcd','hello')
console.log(rstr);
function fn(){
arguments 參數集合 是一個類數組
類數組不具有數組的方法 比如push
arguments.push(5)
es6裡面提供了一個方法 Array.from
使用Array.from把類數組轉成真正的數組,這樣就可以使用數組的方法了 比如push pop
let arr = new Array()
let arr = Array.from(arguments)
arr.push(5)
console.log(arr); }
fn(1,2,3,4)
6、split() 把一個字元串分割成字元串數組
數組轉字元串
let arr = [1,2,3];
let str = arr.join('-');
console.log(str);
let str = 'hello';
split()不加參數 會把hello這個整體放到數組當中
str.split('') 把hello這個字元串 用空字元串分割 轉化為數組
str.split(',') 如果用字元串中不存在的字元分割 那麼還是會把整體放到數組中
str.split('e') 用e當作分割符 把字元串分割成數組 ['h','llo']
str.split('l') 用l當作分割符 會變成空字元串 因為有兩個l 所以會分割成用['he', '', 'o']
let arr = str.split('l');
console.log(arr);
7、 indexOf() 返回某個指定的字元串值在字元串中首次出現的位置(★首次很重要)
let str = 'hello'
str.charAt(1) => e
和數組的indexOf一樣
let index = str.indexOf('l');
console.log(index);
8、lastIndexOf() 返回一個指定的字元串值最後出現的位置
let str = 'hello'
let index = str.lastIndexOf('l');
console.log(index);
9、 match() 可在字元串內檢索指定的值,或找到一個或多個正則表達式的匹配
let str = 'he123llo456';
str.match('o') 使用match來檢索o 可以知道o在字元串內的信息,以數組的形式返回
比如o所在的索引,o所在的字元串和o的長度
let a = str.match('o')
console.log(a);
/\d+/ 代表匹配一段整體的數字
/\d/代表匹配一個數字 g代表全局
總體來說就是 在str字元串全局內 去查找一個一個的數字
會以一個數組的形式方式
不寫g 只會返回第一個 寫g 代表全局 會查找所有
let a = str.match(/\d+/g);
console.log(a);
10、 toLowerCase() 把字元串轉換為小寫
let str = "HELLO"
let str2 = str.toLowerCase();
console.log(str2);
11、 toUpperCase() 把字元串轉換為大寫
let str = 'hello'
let str2 = str.toUpperCase();
console.log(str2);
C. js定義函數對象有幾種方式
在JavaScript中定義對象可以採用以下幾種方式:
1.基於已有對象擴充其屬性和方法
2.工廠方式
3.構造函數方式
4.原型(「prototype」)方式
5.動態原型方式
--1.基於已有對象擴充其屬性和方法
object.name="zhangsan";
object.sayName=function(name)
{
this.name=name;
alert(this.name);
}
object.sayName("lisi");
--2.工廠方式
functioncreateObject()
{
varobject=newObject();
object.username="zhangsan";
object.password="123";
object.get=function()
{
alert(this.username+","+this.password);
}
returnobject;
}
varobject1=createObject();
varobject2=createObject();
object1.get();
--採用帶參數的構造方法:
functioncreateObject(username,password)
{
varobject=newObject();
object.username=username;
object.password=password;
object.get=function()
{
alert(this.username+","+this.password);
}
returnobject;
}
varobject1=createObject("zhangsan","123");
object1.get();
D. 自定義對象
在Javascript中,除了js本身提供的自定義對象外(如Array、Date、Number等),用戶還可以自己創建對象,這種由用戶自己創建的虛敬敏對象就被稱為自定義對象。
1.2.1、「字典」結構:對象的屬性由鍵/值對的形式組成,屬性名是字元串,屬性值可以是任意類型。
1.2.2、原型繼承:Js的自定義對象可以繼承原型的屬性。
1.2.3、動態結構:可動態的增添或刪除對象的屬性
1.2.4、引用類型:js中的對象為引用類型, 即a為一個對象,b=a,改變b的話a也會被改變。我們也稱這種特性為 淺拷貝 ,這里b=a只是引用了a的地址,所以當我們改變b時,會根據地址將a也改變。
Js中創建自定義對象,主要通過三種方式:
1、對象直接量:原型為Object.prototype(也被稱為字面量)。
2、構造函數:原型為構造函數的prototype屬性。
3、Object.create():原型為傳入的第一個參數,若第一個參數為null,以Object.prototype為原型。
這種方法適合用在某個特差枝定的作用域內
構造函數的函數名用駝峰法(即首字母大寫)表示,將它與普通函數區分開來。
create方法接收兩個參數,第一個參數接收創建對象的原型,可以為null,此時對象的原型為undefined;第二個參數接收一個屬性描述符稿沒。
序列化即是調用JSON方法,將對象轉化為字元串,也可以通過反序列化將字元串轉成對象。
作用:把對象轉化成字元串。
作用:將json字元串轉成json對象
E. JavaScript中的全局對象,內置對象和預定義對象是什麼
1.全局對象是預定義的對象,作為JavaScript的全局函數和全局屬性的佔位符。
通過使用全局對象,可以訪問所有其他所有預定義的對象、函數和屬性。
全局對象不是任何對象的屬性,所以它沒有名稱。
2.內部對象是編寫自定義代碼所用語言的基礎,該代碼基於想像實現自定義功能。
JavaScript有許多將其定義為語言的內部對象。本文介紹了一些最常用的對象,
並簡要介紹了它們有哪些功能以及如何使用這些功能。
3.預定義對象這個像是select,Array等這個都是預定義對象。
F. 新手求解js的對象,屬性,方法,的關系。內有具體例子
對於例1做一些解釋:
通過varx=function(){}或者functionx(){}這種形式定義的函數不屬於任何對象,只可以在它所屬的閉包范圍內通過x()這種形式來執行.
全局對象(瀏覽器對象模型中是Window對象)所屬的函數或屬性可以省略全局對象名,即window.alert()可以簡寫為alert()
1.在例子2中這個js自帶函數和對象名的從屬關系是什麼?
indexOf這個方法是在String的原型中被定義的,indexOf只是被string對象所"繼承".
2.在教程中看過實例。自定義對象內可以定義和這個對象相關的不同屬性名。那麼在例子2中的函數是否在這個對象內被定義了。
沒有.
varx="abcd"這里x是一個string對象(即typeofx=='string'),因此它繼承了String的原型中定義的所有方法和屬性(例中indexOf是在String的原型中定義的,即String.prototype.hasOwnProperty("indexOf")).
在javascript原型鏈繼承模型中,對象可以通過"."運算符調用它本身或者原型鏈中任一對象中定義的函數.
3.函數是處理數據的。 如果問題2成立了。那麼在例2中是不是對象還定義了這個函數處理的數據的種類?
沒有.另外,問題2不成立.
javascript是弱類型的腳本語言,函數中的參數不必定義類型,甚至不用確定個數.
4.是不是像x.indexOf(「a」,0)這種使用方法的函數必須跟隨對象名?
不是的,可以通過Function.prototype.call或者Function.prototype.apply來更改函數中this的指向(可以認為是操作對象)
例如
varindexOf=String.prototype.indexOf;
indexOf.call(x,"a",0);
indexOf.apply(x,["a",0]);
5.對於圖片對不對?
圖片不完全正確.
參考下面的例子和圖片
functionPoint(x,y){
//Point擁有x和y兩個屬性
this.x=x;
this.y=y;
}
Point.prototype={
//Point從它的原型中"繼承"了distanceFromOrgin方法
distanceFromOrgin:function(p){
returnMath.sqrt((p.x-this.x)*(p.x-this.x)+(p.y-this.y)*(p.y-this.y));
}
};
//p1誕生,它擁有Point以及它的各級原型中定義的所有方法,包括Object的原型中定義的toString方法
varp1=newPoint(3,-4);
G. 利用js定義商品對象,包含:商品編號、商品名稱、商品類別、單價、生產商等屬性;還包含自定義的方法,即
function proct(no, name, type, price, factory) {
this.no = no;
this.name = name;
this.type = type;
this.price = price;
this.factory = factory;
this.print = function() {
alert(this.no);
//.........
}
}
H. JS 定義全局對象屬性
如果你的 var obj={abc:"123",def:"888" } 在一個函數塊(function)裡面,obj就不是全局變數哦,所以,如果你確定要obj定義一個全局變數,很簡單,這樣寫:
obj={abc:"123",def:"888" }
這樣,obj徹底是個全局變數了,哪裡都可以用到!
如還有疑問,請聯系我哦