當前位置:首頁 » 網頁前端 » 前端函數參數為this
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

前端函數參數為this

發布時間: 2022-06-17 16:30:04

① js的函數參數列表傳入this啥意思比如tset1(this);_>啥意思

把當前對象(也就是input)傳遞到test4函數中,這樣test4就可以直接對這個對象進行操作了,而不需要再通過復雜繁瑣的過程在頁面上定位目標對象。

② 如何理解JavaScript中的caller,callee,call,apply 前端設計

在提到上述的概念之前,首先想說說javascript中函數的隱含參數:arguments
Arguments —— 該對象代表正在執行的函數和調用它的函數的參數。
[function.]arguments[n]
參數
function :選項。當前正在執行的 Function 對象的名字。
n :選項。要傳遞給 Function 對象的從0開始的參數值索引。

說明
Arguments是進行函數調用時,除了指定的參數外,還另外創建的一個隱藏對象。Arguments是一個類似數組但不是數組的對象,說它類似數組是因為其具有數組一樣的訪問性質及方式,可以由arguments[n]來訪問對應的單個參數的值,並擁有數組長度屬性length。
還有就是arguments對象存儲的是實際傳遞給函數的參數,而不局限於函數聲明所定義的參數列表,而且不能顯式創建 arguments 對象。
arguments 對象只有函數開始時才可用。
下邊例子詳細說明了這些性質:

//arguments 對象的用法。
function ArgTest(a, b){
var i, s = "The ArgTest function expected ";
var numargs = arguments.length; // 獲取被傳遞參數的數值。
var expargs = ArgTest.length; // 獲取期望參數的數值。
if (expargs < 2)
s += expargs + " argument. ";
else
s += expargs + " arguments. ";
if (numargs < 2)
s += numargs + " was passed.";
else
s += numargs + " were passed.";
s += "\n\n"
for (i =0 ; i < numargs; i++){ // 獲取參數內容。
s += " Arg " + i + " = " + arguments[i] + "\n";
}
return(s); // 返回參數列表。
}
在此添加了一個說明arguments不是數組(Array類)的代碼:
Array.prototype.selfvalue = 1;
alert(new Array().selfvalue);
function testAguments(){
alert(arguments.selfvalue);
}
運行代碼你會發現第一個alert顯示1,這表示數組對象擁有selfvalue屬性,值為1,而當你調用函數testAguments時,你會發現顯示的是「undefined」,說明了不是arguments的屬性,即arguments並不是一個數組對象。

現在開始caller,callee,call,apply:
caller:返回一個對函數的引用,該函數調用了當前函數。
functionName.caller functionName 對象是所執行函數的名稱。

說明
對於函數來說,caller屬性只有在函數執行時才有定義。如果函數是由頂層調用的,那麼 caller 包含的就是 null 。
如果在字元串上下文中使用 caller 屬性,那麼結果和functionName.toString 一樣,也就是說,顯示的是函數的反編譯文本。
下面的例子說明了 caller 屬性的用法:
// caller demo {
function callerDemo() {
if (callerDemo.caller) {
var a= callerDemo.caller.toString();
alert(a);
} else {
alert("this is a top function");
}
}
function handleCaller() {
callerDemo();
}
//輸出結果:
function handleCaller() {
callerDemo();
}

callee —— 返回正被執行的 Function 對象,也就是所指定的 Function 對象的正文。
[function.]arguments.callee
可選項 function 參數是當前正在執行的 Function對象的名稱。

說明
callee屬性的初始值就是正被執行的 Function 對象。
callee屬性是 arguments 對象的一個成員,它表示對函數對象本身的引用,這有利於匿名
函數的遞歸或者保證函數的封裝性,例如下邊示例的遞歸計算1到n的自然數之和。而該屬性
僅當相關函數正在執行時才可用。還有需要注意的是callee擁有length屬性,這個屬性有時候
用於驗證還是比較好的。arguments.length是實參長度,arguments.callee.length是
形參長度,由此可以判斷調用時形參長度是否和實參長度一致。
示例
//callee可以列印其本身
function calleeDemo() {
alert(arguments.callee);
}
//用於驗證參數
function calleeLengthDemo(arg1, arg2) {
if (arguments.length==arguments.callee.length) {
window.alert("驗證形參和實參長度正確!");
return;
} else {
alert("實參長度:" +arguments.length);
alert("形參長度: " +arguments.callee.length);
}
}
//遞歸計算
var sum = function(n){
if (n <= 0)
return 1;
else
return n +arguments.callee(n - 1)
}
比較一般的遞歸函數:
var sum = function(n){
if (1==n) return 1;
elsereturn n + sum (n-1);
調用時:alert(sum(100));
其中函數內部包含了對sum自身的引用,函數名僅僅是一個變數名,在函數內部調用sum即相當於調用一個全局變數,不能很好的體現出是調用自身,這時使用callee會是一個比較好的方法。

apply and call:它們的作用都是將函數綁定到另外一個對象上去運行,兩者僅在定義參數方式有所區別:
apply(thisArg,argArray);
call(thisArg[,arg1,arg2…] ]);
即所有函數內部的this指針都會被賦值為thisArg,這可實現將函數作為另外一個對象的方法運行的目的

apply的說明:
如果 argArray 不是一個有效的數組或者不是 arguments 對象,那麼將導致一個 TypeError。
如果沒有提供 argArray 和 thisArg任何一個參數,那麼 Global 對象將被用作 thisArg,
並且無法被傳遞任何參數。

call的說明:
call方法可將一個函數的對象上下文從初始的上下文改變為由 thisArg指定的新對象。
如果沒有提供 thisArg參數,那麼 Global 對象被用作 thisArg
相關技巧:
應用call和apply還有一個技巧在裡面,就是用call和apply應用另一個函數(類)以後,當前的函數(類)就具備了另一個函數(類)的方法或者是屬性,這也可以稱之為「繼承」。
看下面示例:
// 繼承的演示
function base() {
this.member = " dnnsun_Member";
this.method = function() {
window.alert(this.member);
}
}
function extend() {
base.call(this);
window.alert(member);
window.alert(this.method);
}

上面的例子可以看出,通過call之後,extend可以繼承到base的方法和屬性。
順便提一下,在javascript框架prototype里就使用apply來創建一個定義類的模式,
其實現代碼如下:
var Class = {
create: function() {
returnfunction() {
this.initialize.apply(this, arguments);
}
}
}
解析:從代碼看,該對象僅包含一個方法:Create,其返回一個函數,即類。但這也同時是類的
構造函數,其中調用initialize,而這個方法是在類創建時定義的初始化函數。通過如此途徑,
就可以實現prototype中的類創建模式
示例:
var vehicle=Class.create();
vehicle.prototype.initialize= function(type)
{
this.type=type;
}
vehicle.prototype.showSelf= function()
{
alert("this vehicle is "+ this.type);
}

var moto=new vehicle("Moto");
moto.showSelf();

你自己看看吧,此文章轉自:http://www.cnblogs.com/ghost-draw-sign/articles/1530108.html

③ this作為方法參數什麼含義

java中的this隨處可見,用法也多,現在整理有幾點:

1. this是指當前對象自己。
當在一個類中要明確指出使用對象自己的的變數或函數時就應該加上this引用。如下面這個例子中:
public class Hello {
String s = "Hello";

public Hello(String s) {
System.out.println("s = " + s);
System.out.println("1 -> this.s = " + this.s);
this.s = s;
System.out.println("2 -> this.s = " + this.s);
}

public static void main(String[] args) {
Hello x = new Hello("HelloWorld!");
}
}
運行結果:
s = HelloWorld!
1 -> this.s = Hello
2 -> this.s = HelloWorld!
在這個例子中,構造函數Hello中,參數s與類Hello的變數s同名,這時如果直接對s進行操作則是對參數s進行操作。若要對類Hello的成員變數s進行操作就應該用this進行引用。運行結果的第一行就是直接對構造函數中傳遞過來的參數s進行列印結果; 第二行是對成員變數s的列印;第三行是先對成員變數s賦傳過來的參數s值後再列印,所以結果是HelloWorld!

2. 把this作為參數傳遞
當你要把自己作為參數傳遞給別的對象時,也可以用this。如:
public class A {
public A() {
new B(this).print();
}

public void print() {
System.out.println("Hello from A!");
}
}
public class B {
A a;

public B(A a) {
this.a = a;
}

public void print() {
a.print();
System.out.println("Hello from B!");
}
}
運行結果:
Hello from A!
Hello from B!
在這個例子中,對象A的構造函數中,用new B(this)把對象A自己作為參數傳遞給了對象B的構造函數。

④ javascript在函數內部接收函數的參數this對象,得到這個對象再次使用

<a onclick="dodo(this)">dodo</a>
--
function dodo(obj){
obj.XXX;//this對象會傳過來,你可以用了。
}

⑤ 在javascript中,function里this的指向是怎樣的

Javascript中一個函數的this關鍵字的行為相對其它語言有些不同。在嚴格模式和非嚴格模式間也有區別。
在大多數情況下,this的值由函數如何調用來決定。this值不能在函數執行過程中賦值設置,並且每次函數調用時this值可能也不相同。ES5通過添加bind方法設置函數的this值,無論函數如何被調用。(this值永久不變)
全局上下文中:
全局執行環境中(函數外部),無論在與不在嚴格模式下this指向全局對象。
console.log(this.document===document);//true
//在web瀏覽器中,window對象即是全局對象:
console.log(this===window);//true
this.a=37;
console.logn(window.a);//37
function上下文
在函數內部,this值依賴於函數如何調用。
簡單調用:
functionf2(){
"usestrict";//使用嚴格模式
returnthis;
}
f2()===undefined;

⑥ js函數中的this是什麼意思

this是指在哪個標簽中調用即為哪個標簽對象
例如:<div onclick="this.style.color='red'">red</div> 則是使當前div的內部文字為紅色

⑦ js裡面,this指的是什麼

  1. 在一般函數方法中使用 this 指代全局對象

functiontest(){

this.x = 1;

alert(this.x);

}

test();// 1

2.作為對象方法調用,this 指代上級對象

function test(){

alert(this.x);

}

var o = {};

o.x = 1;

o.m = test;

o.m(); // 1

3.作為構造函數調用,this 指代new 出的對象

function test(){

this.x = 1;

}

var o = new test();

alert(o.x); // 1

//運行結果為1。為了表明這時this不是全局對象,我對代碼做一些改變:

var x = 2;

function test(){

this.x = 1;

}

var o = new test();

alert(x); //2


4.apply 調用 ,apply方法作用是改變函數的調用對象,此方法的第一個參數為改變後調用這個函數的對象,this指代第一個參數

var x = 0;

function test(){

alert(this.x);

}

var o={};

o.x = 1;

o.m = test;

o.m.apply(); //0

//apply()的參數為空時,默認調用全局對象。因此,這時的運行結果為0,證明this指的是全局對象。如果把最後一行代碼修改為


o.m.apply(o); //1


摘自 pabitel's blog

⑧ 如何理解 JavaScript 中作為參數的函數的作用域和 this

作用域於參數類型無關,也就是說不管參數是函數還是其他類型,這個參數的作用域只在接收這個參數的函數內有效,如下:

functiontest(callback){
if(typeofcallback=="function"){
callback();
}

//此時這個參數的作用域只在test這個函數內有效,其他地方都是無效的。
}

this是一個指針類型,一般情況下是指向調用該方法或者屬性的對象本身,除非指定了this的指向,否則都是指向window對象,下面這段代碼希望對你的理解有幫助。

varobj={
fun:function(){
this.log("這個地方的this即為obj對象");
},
log:function(text){
console.log(text);
//當然這里的this也是指向obj對象的
}
}

functionstu(){
this.getAge=function(){
//此時這里的this指向stu類的實例,即指向下面注釋代碼中的stuObj對象
//varstuObj=newstu();
//stu.getAge();
}
}
functioncallback(){
//此時這里的this指向下面被注釋代碼中的obj,因為他手動指定了this對象
//除了call可以手動指定this之外apply也可以指定this指向
//varobj={name:"小明"};
//callback.call(obj);
}

除了以上幾種情況下,還有一種情況this是指向dom元素本身的,如下:

<ahref="#"onclick="alert(this.href)">這個this即為這個a標簽本身</a>

除了以上幾種情況,this都是指向window對象的,當然不排除有一些我不清楚的情況。

⑨ c++函數形參為this是什麼意思

this:指向當前對象的指針,並沒什麼特別的
如果不用這個關鍵字,怎麼取當前對象的指針呢...?
上述代碼中的this指向當前CDDBTestView類的對象,僅此而已

我覺得this關鍵字多數情況可用也可不用,因為在類函數中訪問成員一般並不需要加上這個關鍵字,除非是有局部變數或參數名字和類成員變數一樣,就需要加this以示區分,如下是完整代碼示例:
#include <iostream>

class A{
int v;
public:
A(){v=3;}
void Set(int v){
std::cout<<"this->v:"<<this->v<<"\nv:"<<v<<'\n';
this->v=v;
}
};

int main(){
A a;
a.Set(4);
return 0;
}

⑩ javascript中函數方法call()中參數this的問題

this寫在不同的地方代表不同的對象

在classB內寫的this指的就是classB

javascript不是一個真正面向對象的語言,所謂的繼承不過是和面向對象的語言實現繼承差不多的效果而已

你先了解call()的用法:

call方法:
語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
定義:調用一個對象的一個方法,以另一個對象替換當前對象。
說明:
call 方法可以用來代替另一個對象調用一個方法。call 方法可將一個函數的對象上下文從初始的上下文改變為由 thisObj 指定的新對象。

對你這里來說

functionClassB(sColor)
{
ClassA.call(this,sColor);
}

意思就是說 用ClassB的this來代替ClassA的this來執行ClassA()這個函數,所以ClassB就有了ClassA的所有功能 感覺像是繼承了ClassA