1. 程式人生 > >Java 與 Javescript 的建構函式區別

Java 與 Javescript 的建構函式區別

Java 與 Javescript 的建構函式區別

眾所周知 java與 javascript其實是兩種不同的語言 java是一種引用廣泛的語言而javascript則是一種指令碼語言 。之間的區別之前沒有太多理解因為學習尚淺且兩者又都是面向物件,今天學習javascript的面對物件就從面對物件之建構函式來講解區別。
1.建構函式的作用:對物件進行初始化.

我們來看程式碼

function Person(name, age, job) {
                this.name = name;
                this.age = age;
                this
.job = job; this.sayName = function() { alert(this.name); }; this.showAge = function(){ alert(this.age); } } var person1 = new Person("Nicholas", 29, "Software Engineer"); var
person2 = new Person(); }

這裡建立兩個物件 person1 , person2
如果熟悉java的朋友會覺得 javascript並沒有產生建構函式 我們看一下java的建構函式String 類原碼

public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
    private final char value[];
    private int hash; 
    private static final
long serialVersionUID = -6849794470754667710L; public String() { this.value = new char[0]; } public String(String original) { this.value = original.value; this.hash = original.hash; } }

這裡我省略了一些備註 稍微瞭解java的朋友應該可以理解 由於javascrpit 的var 型別 和函式沒有嚴格規定數量型別等。。。所有就沒有java這種對於每一種情況都建立一種建構函式 也因此javascript更適合作為一種指令碼語言。

那麼javascript的建構函式有事如何實現的呢?

根據上面的程式碼我們發現 person1 和 person2 都可以執行showAge() 函式但是person1 結果為29 person2結果為 undefined ???
這裡就要說到java 和javascript的建構函式的共同點

1.函式內部自然會產生一個物件,this指向這個物件

2.函式預設返回this這個物件

function Person(name, age, job) {
                var obj = {};
                this = obj ;
                this.name = name;
                this.age = age;
                this.job = job;
                this.sayName = function() {
                    alert(this.name);
                };
                this.showAge = function(){
                    alert(this.age);
                }
                return obj ;
            }

結合程式碼可以看到這就是 javascript 自動幫助我們執行的
當然 這個物件是需要 new 這個關鍵字

現在學術尚淺 我來總結一下其他博主的內容

javascript建構函式呼叫所經歷的步驟:
1)建立一個新的物件;
2)將建構函式的作用域賦給新物件(因此this指向了這個新物件);
3)執行建構函式中的程式碼(為這個新物件新增屬性);
4)返回新物件
(4)建構函式存在的問題:每個方法都要在每個例項上重新建立一遍。(每定義一個函式就是例項化了一個物件),不同例項上的同名函式是不相等的。其解決方法便是使用原型模型。
原文(https://blog.csdn.net/catjuting/article/details/78459416)

java建構函式與普通函式的區別:

(1). 一般函式是用於定義物件應該具備的功能。而建構函式定義的是,物件在呼叫功能之前,在建立時,應該具備的一些內容。也就是物件的初始化內容。
(2). 建構函式是在物件建立時由jvm呼叫, 給物件初始化。一般函式是物件建立後,當物件呼叫該功能時才會執行。
(3). 普通函式可以使用物件多次呼叫,建構函式就在建立物件時呼叫。
(4). 建構函式的函式名要與類名一樣,而普通的函式只要符合識別符號的命名規則即可。
(5). 建構函式沒有返回值型別
原文(https://blog.csdn.net/qq_33642117/article/details/51909346)

其中兩篇文章頁講到了 javascript 的原型prototype 和java的構造程式碼塊都值得學習!

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-

-